2016-09-19 33 views
0

在我的項目中,我想將多個數據保存在單獨的數據庫錶行中。Yii2傳遞數組值並將數據存儲在數據庫表中

在我的控制器操作的代碼如下:

$deletedProducts = new \app\models\ProductlinesDeleted(); 
$app = \app\models\Productlines::find() 
           ->where(['product_id' => $id])->all(); 

     foreach ($app as $prod){ 
      $deletedProducts->productline_id = $prod->productline_id; 
      $deletedProducts->area_id = $prod->area_id; 
      $deletedProducts->product_id = $id; 
      $deletedProducts->internal_code = $prod->internal_code; 
      $deletedProducts->save(); 
      $prod->delete(); 
     } 
      return $this->redirect(['index']); 

$應用可以返回多個產品。基於此,我想將數據保存在數據庫表中。

  • 每個產品都有一個area_id。
  • 每個產品都有一個area_id。

,比如我有

  • 產品1區1
  • 產品1區2

所以有2個產品具有不同的區域。當我執行此操作時,必須保存:

  • 產品1在數據庫表格行中具有區域1。
  • 產品1在數據庫表下一行中有區域2。

    我該如何做到這一點?謝謝。

回答

1

試試這個:

$app = \app\models\Productlines::find() 
           ->where(['product_id' => $id])->all(); 
    foreach ($app as $prod){ 
     $deletedProducts = new \app\models\ProductlinesDeleted(); 
     $deletedProducts->productline_id = $prod->productline_id; 
     $deletedProducts->area_id = $prod->area_id; 
     $deletedProducts->product_id = $id; 
     $deletedProducts->internal_code = $prod->internal_code; 
     $deletedProducts->save(); 
     $prod->delete(); 
    } 
     return $this->redirect(['index']); 
+0

不,它和我的代碼一樣..沒有區別 –

+0

您在循環中創建了$ deletedProducts變量,因此每一個現有記錄都被寫入,並且將$ deletedProducts放入循環中。所以每次創建新對象並保存新記錄 –

+0

感謝哥們!它實際上現在工作正常 –

0

可以使用beforeDelete事件你的活動記錄模型文件裏面像

public function beforeDelete() { 
    $deletedProducts = new \app\models\ProductlinesDeleted(); 
    $deletedProducts->productline_id = $this->productline_id; 
    $deletedProducts->area_id = $this->area_id; 
    $deletedProducts->product_id = $this->product_id; 
    $deletedProducts->internal_code = $this->internal_code; 
    $deletedProducts->save(); 

    return parent::beforeDelete(); 
} 

該方法將得到調用每個記錄您的表格行。因此,對於刪除的產品代碼會像

$products = \app\models\Productlines::find()->where(['product_id' => $id])->all(); 
foreach ($products as $prod){ 
    $prod->delete(); //beforeDelete event method will get call while you call this delete method. 
} 
return $this->redirect(['index']); 

注: beforeDelete事件方法會調用僅當您使用上述方法刪除刪除記錄。

+0

其實這是我的actionDelete()的一部分。我從我的searchModel傳遞area_id,我無法將它傳遞給beforeDelete()方法。基於searchModel條件我刪除數據。無論如何感謝您的建議 –

+0

@MohanPrasad實際上找到產品和foreach循環將在您的actionDelete()和beforeDelete將在Productlines模型文件中。供您參考 - http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#beforeDelete()-detail。無論如何,你的問題得到解決任何方式。祝一切順利。 –

相關問題