Speichern von Benutzer- und Detailzeilen mit Cake 2.4.5
-
20-12-2019 - |
Frage
Ich bin ein ganz neuer Kuchen-Neuling und habe mich gefragt, wie ich einen neuen Benutzer und auch die Kontaktdaten erstellen könnte
Datenbank ist so
Benutzer
- Benutzer-ID
- contact_detail_id
- Passwort
- Rollen-ID
- Nutzername
Kontaktdetails
- contact_detail_id
- Adresse 1
- Adresse 2
und viele andere Bereiche
Im Benutzermodell habe ich public $hasOne = array('ContactDetail');
Da der Benutzer ein Kontaktdetail hat
Was ich nun wissen muss, ist, wie dies in der Add-Methode gespeichert werden würde, da viele sagten, sie sollten „saveassociated“ verwenden, obwohl dies nicht zu funktionieren scheint.
Die Add-Ansicht ist so und nach meinem Verständnis ist das richtig
<?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')); ?>
Lösung
Bitte lesen Sie zuerst die Erklärung von Arun, was Sie in Ihr Modell einbauen müssen und was Sie dann verwenden können $this->User->saveAll()
;oder $this->User->saveAssociated();
um beide Tabellen gleichzeitig zu speichern.
Wenn Sie zuerst „ContactDetail“ und dann „User“ speichern möchten, können Sie diese zweite Option verwenden, sie wird jedoch nicht empfohlen.
$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);`
Aber ich bevorzuge die erste Option, um die erste Option noch einmal zu versuchen,
Notiz:Stellen Sie sicher, dass „ContactDetail“ und „Benutzerbeziehung“ im Modell wie folgt im Benutzermodell vorhanden sind
public $hasOne= array(
'ContactDetail' => array(
'className' => 'ContactDetail',
'foreignKey' => 'contact_detail_id'
)
);
Ich hoffe es hilft.
Andere Tipps
Beim ersten Blick in Ihre Datenbank sollten Sie die folgende Datenbankstruktur verwenden, die Ihnen in weitere Richtungen hilft:
User Model
id
username
password
role_id
ContactDetail Model
id
user_id
address1
address2
Definieren hasMany
Modellbeziehung in der User
Modell mit ContactDetail
wie:
$hasMany => array('ContactDetail');
Füllen Sie nun eine Reihe von Kontaktdaten mit aus (id => address1)
Paar mit:
$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
'fields' => array('ContactDetail.id', 'ContactDetail.address1')));
Um nun die zugehörigen Details zu speichern, verwenden Sie SaveAssociated-Methode.