Cake PHP自动形式和多个表格

时间:2009-07-13 09:52:56

标签: validation forms cakephp

我有一个包含以下字段的表单:

  • 的firstName
  • lastName
  • EMAILADDRESS

后跟(最多)十个姓名/电子邮件字段,如此

  • FRIENDNAME-1
  • friendEmail-1
  • FRIENDNAME-2
  • friendEmail -2- ... 等

firstName,lastName& emailAddress字段将保存到'referrals'表中,但10个名称/电子邮件对将进入'friends'表,其中包含外键refferal_id。

通常我使用cakephp'automagic'表单,并在模型中设置我的验证,然后执行$this->model->save();如果失败,我会回到我的模型验证规则上并且错误消息会回到我的模型中形成HTML。没问题。

虽然如何为TWO表做这个?我认为自动化的东西不是可行的方法,但我觉得如果没有它会丢失很多,例如模型中的验证和自定义错误消息。

有幸福的媒介吗?我是一个相当新的蛋糕,所以我想知道是否有一种方法可以使用多个表格的自动化。

2 个答案:

答案 0 :(得分:6)

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

在推荐模型中创建关系:

var $hasMany = array('Friend');

基本上,请确保正确命名字段,例如

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

在你的推荐控制器中:

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

答案 1 :(得分:2)

首先,我真的希望你的表中没有20个字段,名为'friendName-1','friendEmail-1'等。你的第二个表应该有3个字段 - 你的referral_id,friendname和friendemail。如果你不想标准化,那么你不需要第二个表。

但我离题了,保留自动表单的方法是在您的“朋友”模型中添加“hasMany”和/或“belongsTo”。然后你仍然可以使用FormHelper和Model-> Save()。