Question

Je suis très nouveau dans Cake et je me demandais comment je pourrais créer un nouvel utilisateur et également pouvoir créer les coordonnées.

la base de données est comme ça

Utilisateurs

  • ID de l'utilisateur
  • contact_detail_id
  • mot de passe
  • ID_rôle
  • nom d'utilisateur

Détails du contact

  • contact_detail_id
  • Adresse 1
  • Adresse 2

et bien d'autres domaines

Dans le modèle utilisateur, j'ai attribué public $hasOne = array('ContactDetail');

Puisque l'utilisateur aura un seul contact

Maintenant, ce que j'ai besoin de savoir, c'est comment cela serait enregistré dans la méthode add, car beaucoup ont dit d'utiliser le saveassociated bien que cela ne semble pas fonctionner.

La vue ajoutée est comme ça et d'après ce que j'ai compris, c'est correct

<?php echo $this->Form->create('User', array('action' => 'add')); ?>
    <fieldset>
        <legend><?php echo __('Add User'); ?></legend>
    <?php
        echo $this->Form->input('User.username');
                echo $this->Form->input('User.password');
                echo $this->Form->input('roles');

                echo $this->Form->input('ContactDetail.name');
                echo $this->Form->input('ContactDetail.surname');
                echo $this->Form->input('ContactDetail.address1');
                echo $this->Form->input('ContactDetail.address2');
                echo $this->Form->input('ContactDetail.country');
                echo $this->Form->input('ContactDetail.email');
                echo $this->Form->input('ContactDetail.fax');


          ?>      
                <label>Are you interested in buying property in Malta?</label>
          <?php  
                $interest_buy = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_buy_property',array('type'=>'radio','options'=>$interest_buy,'value'=>'0','legend'=>FALSE));
          ?>      
                <label>Are you interested in renting property in Malta?</label>
          <?php  
                $interest_rent = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_rent_property',array('type'=>'radio','options'=>$interest_rent,'value'=>'0','legend'=>FALSE));
                echo $this->Form->input('ContactDetail.mobile');
                echo $this->Form->input('ContactDetail.phone');
                echo $this->Form->input('ContactDetail.postcode');
                echo $this->Form->input('ContactDetail.town');

                echo $this->Form->input('ContactDetail.newsletter',array('type'=>'checkbox','label'=>'Would you like to register for the newsletter?' ,'checked'=>'1','legend'=>FALSE,));
         ?>       

    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
Était-ce utile?

La solution

Veuillez d'abord consulter l'explication d'Arun sur ce qu'il faut mettre dans votre modèle, puis vous pourrez utiliser $this->User->saveAll();ou $this->User->saveAssociated(); pour sauvegarder les deux tables en même temps.

Si vous souhaitez d'abord enregistrer ContactDetail, puis enregistrer l'utilisateur, vous pouvez utiliser cette deuxième option, mais elle n'est pas recommandée.

 $this->User->ContactDetail->create(); 
 $this->User->ContactDetail->save($this->request->data);`
 this->request->data['User']['contact_detail_id'] = $this->User->ContactDetail->id`;
 $this->User->Create();
 $this->User->save($this->request->data);`

Mais je préfère la première option, pour réessayer la première option,

Note:Assurez-vous que ContactDetail et la relation utilisateur sont présents dans le modèle, comme celui-ci dans le modèle utilisateur.

public $hasOne= array(
    'ContactDetail'   => array(
        'className' => 'ContactDetail',         
        'foreignKey' => 'contact_detail_id'
    )
);

J'espère que cela aide.

Autres conseils

Lors du premier examen de votre base de données, vous devez utiliser la structure de base de données suivante, cela vous aidera dans plusieurs directions :

User Model

id
username
password
role_id

ContactDetail Model

id
user_id
address1
address2

Définir hasMany relation modèle dans le User Modèle avec ContactDetail comme:

$hasMany => array('ContactDetail');

Remplissez maintenant un tableau de détails de contact avec (id => address1) coupler en utilisant :

$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
                                         'fields' => array('ContactDetail.id', 'ContactDetail.address1')));

Maintenant, pour enregistrer les détails associés, utilisez Méthode SaveAssociated.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top