2009-07-13 9 views
2

I ont un formulaire avec les champs suivants:gâteau formes PHP automagiques et plusieurs tables

  • prenom
  • lastName
  • emailAddress

suivi (jusqu'à) dix nom/email champs, comme si

  • friendName-1
  • friendEmail-1
  • FRIENDNAME-2
  • friendEmail-2 ... etc.

Les firstName, lastName & champs de EMAILADDRESS seront enregistrés dans une table 'références', mais 10 Les paires nom/email iront dans une table 'amis', contenant une clé étrangère refferal_id.

Normalement, j'utilise les formes 'automagic' de cakephp, et j'établis ma validation dans le modèle, et fais un $this->model->save(); En cas d'échec, je retombe sur mes règles de validation du modèle et les messages d'erreur sont récupérés dans mon formulaire html. Pas de problème.

Comment le ferais-je pour deux tables? Je pense que les trucs automagiques ne sont pas la solution, mais je pense que je vais perdre beaucoup de choses sans cela, comme la validation dans mes modèles et les messages d'erreur personnalisés.

Existe-t-il un juste milieu? Je suis relativement nouveau dans le domaine du gâteau et je me demande s'il existe un moyen d'utiliser automagic avec plusieurs tables.

Répondre

6

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

Créer la relation dans votre modèle référence:

var $hasMany = array('Friend'); 

Essentiellement, assurez-vous que vous nommez vos champs correctement, par exemple

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(); 

Et dans votre contrôleur références:

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

D'abord, je l'espère vraiment que vous n'avez pas 20 champs dans le tableau appelé 'FRIENDNAME-1', 'friendEmail-1', etc. Votre deuxième table devrait avoir 3 champs - votre referral_id, friendname et friendemail. Si vous ne voulez pas normaliser, vous n'avez pas besoin de la deuxième table.

Mais je m'égare, la façon de garder vos formes automagiques est de mettre un "hasMany" dans votre modèle de références et/ou un "belongsTo" dans votre modèle "amis". Ensuite, vous pouvez toujours utiliser FormHelper et Model-> Save().

+0

:) non, je ne me suis pas assez clair. L'horrible hard-coded -1, -2 stuff est juste pour la forme html. Je vais juste les parcourir et les sauvegarder en tant que lignes individuelles dans la table de mes amis. –

+0

Ensuite, je pense que tant que vous utilisez hasMany/belongsTo, vous devriez pouvoir automagic. –

Questions connexes