2009-07-13 12 views
2

Ich habe ein Formular mit den folgenden Feldern:Cake PHP Automagic Formulare und mehrere Tabellen

  • vorName
  • nachName
  • emailaddress

gefolgt von (bis zu) zehn Name/E-Mail Felder, so

  • friendName-1
  • friendEmail-1
  • friend-2
  • friendEmail-2 ... usw.

Die Vorname, Nachname & emailaddress Felder werden in eine 'Verweise' Tabelle gespeichert werden, aber 10 Name/E-Mail-Paare werden in eine "Freundes" -Tabelle mit einem Fremdschlüssel refferal_id aufgenommen.

Normalerweise verwende ich die CakePHAP "Automagic" -Formulare, und meine Validierung in das Modell, und tun Sie eine $this->model->save(); Wenn es fehlschlägt ich auf meine Modellvalidierungsregeln zurückgreifen und die Fehlermeldungen wieder in meine Form html gespuckt. Keine Probleme.

Wie würde ich dies für zwei Tabellen tun? Ich denke, dass das Automagic-Zeug nicht der Weg ist, aber ich denke, ich werde viel verlieren ohne es, wie Validierung in meinen Modellen und benutzerdefinierten Fehlermeldungen.

Gibt es ein glückliches Medium? Ich bin ziemlich neu beim Kuchen, also frage ich mich, ob es eine Möglichkeit gibt, Automagic mit mehreren Tabellen zu verwenden.

Antwort

6

Siehe http://book.cakephp.org/view/84/Saving-Related-Model-Data-hasOne-hasMany-belongsTo

Erstellen Sie die Beziehung in Ihrem Referral Modell:

var $hasMany = array('Friend'); 

Im Wesentlichen sollten Sie sich Ihre Felder korrekt benennen, zum Beispiel

echo $form->create('Referral'); 
echo $form->input('first_name'); 
echo $form->input('last_name'); 
echo $form->input('email'); 
foreach (range(0,9) as $index) { 
    echo $form->input('Friend.'.$index.'.name'); 
    echo $form->input('Friend.'.$index.'.email'); 
} 
echo $form->end(); 

Und in Ihren Empfehlungen Controller:

function add() { 
    if(!empty($this->data)) { 
     $this->Referral->saveAll($this->data, array('validate'=>'first')); 
    } 
} 
2

Erstens, ich hoffe wirklich, dass Sie nicht über 20 Felder in der Tabelle 'friend-1' genannt, 'friendEmail-1', usw. Ihre zweite Tabelle sollte 3 Felder haben - Ihre Empfehlungs-ID, Ihr Freundschaftsname und Ihre Freundemail. Wenn Sie nicht normalisieren wollen, brauchen Sie die zweite Tabelle nicht.

Aber ich schweife ab, die Art, Ihre Automagic Forms zu halten, ist eine "hasMany" in Ihrem Empfehlungsmodell und/oder eine "belongsTo" in Ihrem "Freunde" -Modell zu setzen. Dann können Sie noch den FormHelper und Model-> Save() verwenden.

+0

:) nein ich habe mich nicht klar genug gemacht. Das schreckliche hartcodierte -1, -2 Zeug ist nur für das HTML-Formular. Ich werde sie einfach durchlaufen und sie als einzelne Zeilen in meiner Freundesliste speichern. –

+0

Dann denke ich, solange Sie hasMany/belongsTo verwenden, sollten Sie in der Lage sein zu automatisieren. –