Heim >Backend-Entwicklung >PHP-Tutorial >yii2 多表插入数据

yii2 多表插入数据

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 20:09:251405Durchsuche

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

<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>

}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn