【问题标题】:save child model() in Yii在 Yii 中保存子模型()
【发布时间】:2011-03-14 10:13:47
【问题描述】:

假设我有两个数据库表。一个用于表单,另一个用于字段:

表格:
ID(pk),user_id,name,description

字段:
ID(pk),form_id(fk),name,description

父“表单”表单还具有子“字段”表的输入表单字段,例如fields.namefields.description

我需要的是:每当我将值放入表单时,它会将所有字段保存到其相应​​的属性中,包括子“字段”表单输入。就像表单表将存储自己的字段一样,并且字段将存储自己的字段。

那么如何做到这一点呢?我认为应该使用“保存孩子模型”?但不知道如何使用保存子模型,因为我是 Yii 的新手。

请帮助我。

【问题讨论】:

    标签: yii


    【解决方案1】:

    您可以通过循环所有孩子并保存它来保存孩子(如果孩子不止一个)。例如提交给控制器的 $_POST 值你可以设置成这样

    $_POST['con']['user_id'] = 1
    $_POST['con']['name']='Andrew'
    $_POST['con']['child'][1]['name'] = 'Some child1'
    $_POST['con']['child'][1]['description']='some description'
    etc...

    那么就可以通过这个获取这些post值了

    $model->attributes = $_POST['con'];
    $model->save();
    foreach($model->children as $key=>$child){
    $child->attributes = $_POST['con']['child'][$key];
    $child->save();
    }

    注意,这只是概念,希望对你有帮助。

    【讨论】:

      【解决方案2】:

      查看 Yii 终极指南中的表格输入:

      http://www.yiiframework.com/doc/guide/1.1/en/form.table

      (我在 Yii 文档中根本没有看到 saveChildModel()...)

      【讨论】:

        【解决方案3】:

        试试这个

        if(isset($_POST['form'] && isset($_POST['fields']){
          $forms->attributes =$_POST['form']
          $fields->attributes =$_POST['fields']
        
          $valid=$forms->validate();
          $valid=$valid && $fields->validate();  
          if($valid){
                  $forms->save(false); //to cancel validation
                  $fields->save(false); //to cancel validation
             }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-14
          • 1970-01-01
          相关资源
          最近更新 更多