有人實現過多表插入資料嗎?
if(Yii::$app->request->isPost){ if(Yii::$app->request->post('Test') && $this->Test->load(Yii::$app->request->post()) && $this->Test->save($data)){ // var_dump($this->Dish->save());exit; 始終 是false if(Yii::$app->request->post('Dish') && $this->Dish->save()){ return $this->render('index',[ 'test' => $this->Test, 'dish' => $this->Dish, ]); }else{ var_dump($dish); // 接受的是有值的 var_dump($this->Dish->getErrors()); // 接受的是空值 } }else{ var_dump($this->Test->getErrors()); } }else{ return $this->render('index',[ 'test' => $this->Test, 'dish' => $this->Dish, ]); }
這樣是不行的嗎?
回複內容:
有人實現過多表插入資料嗎?
if(Yii::$app->request->isPost){ if(Yii::$app->request->post('Test') && $this->Test->load(Yii::$app->request->post()) && $this->Test->save($data)){ // var_dump($this->Dish->save());exit; 始終 是false if(Yii::$app->request->post('Dish') && $this->Dish->save()){ return $this->render('index',[ 'test' => $this->Test, 'dish' => $this->Dish, ]); }else{ var_dump($dish); // 接受的是有值的 var_dump($this->Dish->getErrors()); // 接受的是空值 } }else{ var_dump($this->Test->getErrors()); } }else{ return $this->render('index',[ 'test' => $this->Test, 'dish' => $this->Dish, ]); }
這樣是不行的嗎?
這樣肯定不行。
關鍵是這個地方:$this->Test->load(Yii::$app->request->post())
你的一個post過來的form只可能對應一種model,不可能一個form對應好幾個不同的model,所以你既然用Test這個model load了所有post的內容,不能再用Dish去再load一遍。
如果你的form裡混雜了來自於兩個不同model的欄位,那麼你還是需要指定一個為主model,在這個主model裡增加一些虛擬屬性,在load後臨時存放一下,然後new一個model出來,把這些臨時存放的屬性值放到新model裡去,然後save
用事務吧!
post過來的資料要根據模型區分
如:
post:{
'Test' : { 'id' : 1, 'name' : 'kama'},'Dish' : { 'did' : 1, 'dname' : 'abc'}
}
開啟事務 :
$data = Yii::$app->request->post();
if(!empty($data['Test']) && !empty($data['Dish']))
{
$transaction = \Yii::$app->db->beginTransaction();try { $Test = new Test(); $Test->load($data); if($Test->save()) { #save Dish $transaction->commit(); } else { $transaction->rollback(); }} catch(Exception $e) { # 復原事務 $transaction->rollback();}
}