首頁 >後端開發 >php教程 >yii2 多表插入数据

yii2 多表插入数据

WBOY
WBOY原創
2016-06-06 20:09:251385瀏覽

有人实现过多表插入数据吗?

<code>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,
             ]);
        }</code>

这样是不行的吗?

回复内容:

有人实现过多表插入数据吗?

<code>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,
             ]);
        }</code>

这样是不行的吗?

这样肯定不行。

关键是这个地方:$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:{

<code>'Test' : {
    'id' : 1,
    'name' : 'kama'
},
'Dish' : {
    'did' : 1,
    'dname' : 'abc'
}</code>

}

开启事务 :
$data = Yii::$app->request->post();
if(!empty($data['Test']) && !empty($data['Dish']))
{

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

}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn