【问题标题】:Cake PHP automagic forms and multiple tablesCake PHP 自动表格和多个表格
【发布时间】:2010-11-10 06:05:00
【问题描述】:

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

  • 名字
  • 姓氏
  • 电子邮件地址

后跟(最多)十个姓名/电子邮件字段,像这样

  • friendName-1
  • friendEmail-1
  • friendName-2
  • friendEmail-2 ... 等

firstName、lastName 和 emailAddress 字段将保存到“referrals”表中,但 10 个姓名/电子邮件对将保存到“friends”表中,其中包含外键 refferal_id。

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

但是,我将如何为两张桌子执行此操作?我认为自动化的东西不是要走的路,但我觉得没有它我会失去很多,比如我的模型中的验证和自定义错误消息。

有快乐的媒介吗?我对蛋糕很陌生,所以我想知道是否有一种方法可以对多个表使用 automagic。

【问题讨论】:

    标签: validation forms cakephp


    【解决方案1】:

    见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'));
       }
    }
    

    【讨论】:

      【解决方案2】:

      首先,我真的希望您在名为“friendName-1”、“friendEmail-1”等的表中没有 20 个字段。您的第二个表应该有 3 个字段——您的推荐人 ID、朋友名和朋友电子邮件。如果你不想规范化,那么你不需要第二个表。

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

      【讨论】:

      • :) 不,我没有让自己足够清楚。可怕的硬编码 -1,-2 仅适用于 html 表单。我将遍历它们并将它们作为单独的行保存在我的朋友表中。
      • 那我觉得只要你使用hasMany/belongsTo,你应该可以自动变魔术。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2014-12-14
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多