2016-10-19 79 views
0

在我的項目中,我希望在一次使用foreach循環插入多行數據。我有一個具有元素數組的變量。Yii2使用foreach循環保存數據庫中的多個數據創建

例如,如果我的數組有說3個不同的元素。我想將所有這3個元素保存在3個不同的數據庫表格行中。我也有其他所有3個數組元素相同的列。

我已經把它們放在foreach語句中,但只有第一個元素被保存。有什麼方法可以實現嗎?

我的代碼

public function actionCreate($prodID) 
    { 
     $model = new ProductlinesStorage(); 

     if ($model->load(Yii::$app->request->post())) { 
      $productlineID = Productlines::find()->where(['area_id' => $model->productline_id, 'product_id' => $prodID])->all(); 

      foreach ($productlineID as $singleProductlineID) { 
       $model->productline_id = $singleProductlineID->productline_id; 
       $model->user_id = Yii::$app->user->identity->user_id; 
       $model->isNewRecord = true; 
       $model->save(); 
      } 
      return $this->redirect(['/product/storage?id='.$prodID]); 
     } else { 
      return $this->renderAjax('create', [ 
       'model' => $model, 
       'prodID' => $prodID, 
      ]); 
     } 
    } 

只有productline_id是不同的其他列將有相同的數據,所有的prdouctline_id。

謝謝!!!

+0

這是什麼線'$ productlineID =輸出代理產品::發現() - >其中([ 'AREA_ID'=> $模型 - > productline_id, 'PRODUCT_ID'=> $ PRODID ]) - > all();'我認爲你只能獲得單個記錄。 –

+0

不,我得到多個記錄,我已經傾倒它,並檢查 –

+0

你能告訴我你的'$ productlineID'輸出。 –

回答

2

你只有一個模型對象,而你只保存它。 試試這個:

public function actionCreate($prodID) 
{ 
    $model = new ProductlinesStorage(); 

    if ($model->load(Yii::$app->request->post())) { 
     $productlineID = Productlines::find()->where(['area_id' => $model->productline_id, 'product_id' => $prodID])->all(); 

     foreach ($productlineID as $singleProductlineID) { 
      $model = new ProductlinesStorage(); 
      $model->productline_id = $singleProductlineID->productline_id; 
      $model->user_id = Yii::$app->user->identity->user_id; 
      $model->isNewRecord = true; 
      $model->save(); 
     } 
     return $this->redirect(['/product/storage?id='.$prodID]); 
    } else { 
     return $this->renderAjax('create', [ 
      'model' => $model, 
      'prodID' => $prodID, 
     ]); 
    } 
} 
+0

我看到這是沒有任何區別..試過了 –

0

也許你可以修改我的代碼

public function actionCreate() 
 
    { 
 
     $model = new SemesterPendek(); 
 
     $model->user_id = \Yii::$app->user->identity->id; 
 
     $model->npm = \Yii::$app->user->identity->username; 
 

 

 
     $modelsNilai = [new Nilai]; 
 

 

 
     if ($model->load(Yii::$app->request->post())){ 
 
     $model->waktu_daftar = date('Y-m-d h:m:s'); 
 

 
     $model->save(); 
 

 
    $modelsNilai = Tabular::createMultiple(Nilai::classname()); 
 
      Tabular::loadMultiple($modelsNilai, Yii::$app->request->post()); 
 

 

 
      // validate all models 
 
      $valid = $model->validate(); 
 
      $valid = Tabular::validateMultiple($modelsNilai) && $valid; 
 

 
      if ($valid) { 
 
       $transaction = \Yii::$app->db->beginTransaction(); 
 
       try { 
 
        if ($flag = $model->save(false)) { 
 
         foreach ($modelsNilai as $indexTools =>$modelNilai) { 
 
          $modelNilai->id_sp = $model->id; 
 
         // $modelNilai->user_id = \Yii::$app->user->identity->id; 
 

 
          if (! ($flag = $modelNilai->save(false))) { 
 
           $transaction->rollBack(); 
 
           break; 
 
          } 
 
         } 
 
        } 
 
        if ($flag) { 
 
         $transaction->commit(); 
 
         return $this->redirect(['view', 'id' => $model->id]); 
 
        } 
 
       } catch (Exception $e) { 
 
        $transaction->rollBack(); \Yii::$app->session->setFlash('error','gagal'); 
 
       } 
 

 
     } 
 

 
     } else { 
 
      return $this->render('create', [ 
 
       'model' => $model, 
 
       'modelsNilai' => (empty($modelsNilai)) ? [new Nilai] : $modelsNilai, 
 

 

 

 
      ]); 
 
     } 
 
    }

+0

我不明白你的代碼... –

+0

重點創建多個,你可以修改日期 –

0

您需要創建一個不同的對象不同行中保存。 For循環執行3次,但每次更新相同的對象。您可以定義新對象並每次保存。下面的代碼將工作

public function actionCreate($prodID) 
    { 
     $model = new ProductlinesStorage(); 

     if ($model->load(Yii::$app->request->post())) { 
      $productlineID = Productlines::find()->where(['area_id' => $model->productline_id, 'product_id' => $prodID])->all(); 

      foreach ($productlineID as $singleProductlineID) { 
       $model = new ProductlinesStorage(); 
       $model->productline_id = $singleProductlineID->productline_id; 
       $model->user_id = Yii::$app->user->identity->user_id; 
       $model->isNewRecord = true; 
       $model->save(); 
      } 
      return $this->redirect(['/product/storage?id='.$prodID]); 
     } else { 
      return $this->renderAjax('create', [ 
       'model' => $model, 
       'prodID' => $prodID, 
      ]); 
     } 
    } 
+0

它是如何不同於由現在**給出的現存答案** –

+0

我沒有看到答案,兩者都是相似的。沒有工作嗎? –

+0

** Imaginaroom的**答案是正確的。 –

相關問題