CakePHP Multi-Modell-Ansicht
-
02-07-2019 - |
Frage
ich eine Website in CakePHP bin die Schaffung und ich bin ein bisschen neu auf sich. Ich konnte nicht gut Ressourcen zu diesem Thema finden, so dass Sie gehen:
Ich habe eine drei Tabellenstruktur für die Registrierung Benutzer: Users
, Addresses
und Contacts
. Ich habe eine Ansicht mit Informationen aller drei Tabellen bauen wie:
Full Name: [ ] (from Users) Shipping Address: [ ] (from Address) Mobile Phone: [ ] (from Contact) e-Mail Address: [ ] (from Contact)
Was ist der beste Weg, um mit dieser Situation umgehen. Speziell für das Speichern . dass eine save()
Methode selbst (vielleicht eine SQL-Ansicht in der Datenbank) hat ein neues Modell anlegen, dies zu repräsentieren, einen Controller erstellen mit dieser Ansicht umgehen, dass bind
s oder unbind
s info
ich noch fragen, wie ich beide Kontakte behandelt, da sie zwei unterschiedliche INSERT
der sein
Jeder Hinweis oder Ressourcen, die ich von mir graben kann, wird froh sein.
Lösung
Wenn Sie den neuesten 1.2-Code, Check-out Modell :: SaveAll im api
zB. Ihre Ansicht könnte wie folgt aussehen:
echo $form->create('User', array('action' => 'add');
echo $form->input('User.name');
echo $form->input('Address.line_1');
echo $form->input('Contact.tel');
echo $form->end('Save');
Dann in Ihrer Benutzer-Controller add-Methode würden Sie so etwas wie haben:
...
if($this->User->saveAll($this->data)) {
$this->Session->setFlash('Save Successful');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Please review the form for errors');
}
...
In Ihrem User-Modell müssen Sie so etwas wie:
var $hasOne = array('Address', 'Contact');
Ich hoffe, das hilft!
http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1
Andere Tipps
CakePHP Sie leicht unterhalten Verbindung zwischen Ihren Modellen Beziehung ermöglicht, finden Sie unter http://book.cakephp.org/view/78/Associations-Linking-Models-Together für das komplette Detail. Dann retreiving die richtigen Benutzer, werden Sie auch bekommen „kostenlos“, seine Adresse und Kontaktinformationen.
3 Modelle: User, Adresse, Kontakt
User hasOne Address, Contact
Address belongsTo User
Contact belongsTo User
in Ihrem Modell definieren Sie diese wie folgt aus:
class User extends AppModel {
var $name = 'User';
var $hasOne = array('Address','Contact');
..
Um diese Ansicht zu machen, müssen Sie User_id ind Adressen und Kontakte Tabellen
Um dies in einer Ansicht zu verwenden, rufen Sie einfach eine Suche auf dem User-Modell mit einer rekursiven von einem (und btw, die Benutzer-Controller verwenden nur User-Modell).
$this->User->recursive = 1;
$this->set('user', $this->User->find('first', array('conditions'=>array('id'=>666)));
Das in diesem Array für Ihre Ansicht zur Folge haben wird:
array(
'Use' => array(
'id' => 666,
'name' => 'Alexander'
),
'Address' => array(
'id' => 123,
'zip' => 555
),
'Contact' => array(
'id' => 432,
'phone' => '555-1515'
));