yii2 多表插入資料

來源:互聯網
上載者:User
關鍵字 yii2 php
有人實現過多表插入資料嗎?

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();}

}

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.