2008-09-21 10 views
5

Ich erstelle eine Website in CakePHP und ich bin irgendwie neu. Ich konnte keine guten Ressourcen zu diesem Thema finden, also los gehts:CakePHP Multi-Modell-Ansicht

Ich habe eine drei Tabellenstruktur für die Registrierung von Benutzern: Users, und Contacts. Ich muss eine Ansicht mit Informationen aller drei Tabellen wie erstellen:

 
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 umzugehen. Speziell zum Speichern. Erstellen eines neuen Modells dies zu vertreten, das wird eine save() Methode selbst (vielleicht eine SQL-Ansicht in der Datenbank) einen Controller erstellen mit dieser Ansicht umgehen, dass bind s oder unbind s info

ich noch fragen, wie ich behandelt beide Kontakte wie sie sein werden 2 verschiedene INSERT 's

Jeder Hinweis oder Ressourcen, die ich graben kann ich werde froh sein.

Antwort

10

Wenn Ihr die neueste 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 Ihrem Benutzer Controller add-Methode Sie so etwas wie haben würde:

... 

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 Sie so etwas wie benötigen:

var $hasOne = array('Address', 'Contact'); 

Hoffe, dass hilft!

http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1

4

CakePHP ermöglicht es Ihnen, die Verbindung zwischen Ihren Modellen mithilfe der Beziehung einfach zu erhalten, siehe http://book.cakephp.org/view/78/Associations-Linking-Models-Together für das vollständige Detail. Wenn Sie dann den richtigen Benutzer erreichen, erhalten Sie auch "kostenlos", Adresse und Kontaktinformationen.

+0

Hallo.Ich habe meine Frage so geändert, dass sie meine Absicht widerspiegelt, wie ich speichern kann, wie ich den Registrierungs-Controller erstelle und (s) –

+0

CakePHP selbst verwaltet, um zusammengesetzte Objekte zu speichern. Bedeutet das, dass wenn Sie einen Benutzer laden und seinen Kontakt ändern, wenn Sie das implizite "Speichern" von CakePHP für das Benutzerobjekt aufrufen, das Kontaktobjekt ebenfalls aktualisiert wird. – gizmo

1

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, Sie benötigt user_id Feld ind Adressen und Kontakte Tabellen

Um dies in einer Ansicht verwenden zu können, rufen Sie einfach eine Suche auf dem User-Modell mit einer rekursiven von einem (und btw, die Benutzer-Controller nur User-Modell verwendet).

$this->User->recursive = 1; 
$this->set('user', $this->User->find('first', array('conditions'=>array('id'=>666))); 

Dies wird für Ihre Ansicht in diesem Array führen:

array(
    'Use' => array(
    'id' => 666, 
    'name' => 'Alexander' 
), 
    'Address' => array(
    'id' => 123, 
    'zip' => 555 
), 
    'Contact' => array(
    'id' => 432, 
    'phone' => '555-1515' 
));