2017-04-13 16 views
0

において、内のテーブルにsinlge行および複数の列を挿入するyii2において、私は別のテーブル内の1つのテーブルにsinlge行ならびに同じIDを持つ複数の行を挿入するyii2別のテーブル

controller code -- 
 

 
$modelcid = $modeld->categoryid; 
 
$modelpc = $modeld->productcode; 
 
$modelqty = $modeld->qty; 
 
$arrayvalue[]= array('id'=>$modelcid,'pc'=>$modelpc,'qty'=>$modelqty); 
 
$i=0; 
 
foreach($arrayvalue as $key=>$val) { 
 
\t $purchaseid = $modeld->purchaseid = $modelm->purchaseid; 
 
\t $cid = $modeld->categoryid =$val['id'][$i]; 
 
\t $pc = $modeld->productcode = $val['pc'][$i]; 
 
\t $qty = $modeld->qty = $val['qty'][$i]; 
 
\t $remarks = $modeld->remarks = $modelm->remarks; 
 
\t if($modeld->save()){ 
 
\t \t \t $i++; 
 
\t \t } 
 
\t } 
 

 
"$modeld->save()" it saves only first entry.

答えて

2

\yii\db\ActiveRecordisNewRecord属性が決定されます。

をレコードが新しく、ときに挿入するかどうか新しいレコードが保存されるsave()

呼び出して、この変数をので、あなたのコードは、ループの最初の実行中にレコードを作成し、以降の実行でそれを更新しているfalseに設定されています。

各レコードを保存するには、この変数を明示的にtrueに設定する必要があります。また、あなたの主キーフィールドの設定を解除する必要があります。

また
foreach ($arrayvalue as $key => $val) { 
    $modeld->isNewRecord = true; 
    unset($modeld->id); //assuming `id` is your primary key field 
    ... 

、あなたがループ内で$modeldの新しいインスタンスを使用することができます。

foreach ($arrayvalue as $key => $val) { 
    $modeld = new ModelD; //assuming your model class is ModelD 
    ... 
関連する問題