YII Вставка нескольких динамических строк - PullRequest
1 голос
/ 06 января 2012

Это мой код в представлении / _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);
}

Здесь я делаю foreach для вставки нескольких строк в одну таблицу.
Он вставляется таким образом для 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 Ответ

2 голосов
/ 07 января 2012

Проблема довольно проста здесь ..

Что происходит, когда ваш jquery отправляет запрос на публикацию для каждого атрибута или, другими словами, с данными одного столбца в базе данных ... Вот почему вы получаететолько один набор полей в каждой переменной метаданных, который соответствует одному почтовому запросу.

Итак, вы можете либо объединить 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...