YII插入多个动态行

时间:2012-01-06 17:42:14

标签: yii

这是我在view / _form.php

中的代码
<tr>
  <td>
    <?php
    $criteria = new CDbCriteria;
    $criteria->order = 'ScriptArgumentClassType'; //or whatever field
    echo CHtml::activeDropDownList($meta,**'[]ScriptArgumentClass_id'**,CHtml::listData(AutoScriptArgumentClass::model()->findAll`enter code here`($criteria),'id','ScriptArgumentClassType'), array('prompt'=>'Please select Argument class type'));
    ?>  
  </td>
  <td>
    <?php
    $criteria = new CDbCriteria;
    $criteria->order = 'TnType'; //or whatever field
    echo CHtml::activeDropDownList($meta,**'[]Type_id'**,CHtml::listData(AutoTnType::model()->findAll($criteria),'id','TnType'), array('prompt'=>'Please select TN type'));
    ?>
  </td>

  <td>
    <?php
    $criteria = new CDbCriteria;
    $criteria->order = 'service'; //or whatever field
    echo CHtml::activeDropDownList($meta,'**'[]Service_id'**,CHtml::listData(Service::model()->findAll($criteria),'id','service'), array('prompt'=>'Please select Service'));
    ?>
  </td>

  <td>
    <?php
    $criteria = new CDbCriteria;
    $criteria->order = 'Manufacture'; //or whatever field
    echo CHtml::activeDropDownList($meta,'**[]Cpe_id'**,CHtml::listData(AutoCPE::model()->findAll($criteria),'id','Manufacture'), array('prompt'=>'Please select CPE'));
    ?>
  </td>
</tr>

这是一排4列。实际上我已经使用jquery代码在单击AddNew时动态插入行。工作良好。现在我想用yii将它保存到数据库中。

$metadatas=$_POST['AutoTestScriptMeta'];            
foreach ($metadatas as $metadata ) {
  $meta=new AutoTestScriptMeta;             
  $meta->attributes = $metadata;
  $meta->save(false);
}

在这里,我正在做多个行插入一个表格 它以这种方式插入2个输入的行值

1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 2
1 0 0 0
0 3 0 0
0 0 4 0
0 0 0 2

而不是

1 2 3 2
1 3 4 2

而不是插入2行,它插入8行,每行包含一个列值。

以粗体显示代码(** **)。这就是我将它声明为数组的方式。

感谢任何帮助。如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

这里的问题很简单..

正在发生的事情是你的jquery正在为每个属性发布一个post请求,换句话说就是数据库中单列的数据。这就是为什么你在每个元数据变量中只得到一个与一个post请求相对应的字段集。

所以你可以做的就是在保存之前合并4-4个请求。或者让你的jquery提交所有4个下拉值......

我能为你做的第一个代码,

$metadatas=$_POST['AutoTestScriptMeta'];
$iterations=count($metadata)/4;
$clubbed_array=array();
for($i=0;$i<$iterations;$i++)
{
    array_push($clubbed_array,array($metadata[$i*4+0][0],$metadata[$i*4+1][1],$metadata[$i*4+2][2],$metadata[$i*4+3][3]));
}

foreach ($clubbed_array as $clubbed_value ) {
      $meta=new AutoTestScriptMeta;
      $meta->attributes = $clubbed_value;
      $meta->save();
}