在Yii2中一次保存多个模型

Alb*_*ert 4 php transactions yii2

我有两个型号,UsersStudents.我想同时在这些表中插入数据.首先,我将数据保存到Students模型中,然后保存到Users模型中.

现在,如果数据未成功插入到Users模型中,则Students表中已有一个条目.我想要的是只有在两者都可以成功保存数据时才能将数据输入到两个模型中.

现在我的控制器代码看起来像这样:

    public function actionCreate()
        {
            $model = new Students();
            $userModel = new Users();    
if ($model->load(Yii::$app->request->post()) && $userModel->load(Yii::$app->request->post()) && $model->save() && $userModel->save()) 
        {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
                'userModel' => $userModel,
            ]);
        }
    }
Run Code Online (Sandbox Code Playgroud)

用户模型中存在错误,并且在我呼叫时不返回true $userModel->save().在这里,$userModel->save()返回true并将数据插入表中.

没有任何复杂情况,还有其他选择吗?

xCr*_*rZx 10

您应该使用事务来确保正确保存两个模型.例:

$transaction = Yii::$app->db->beginTransaction();

try  {
    if ($model->save() && $userModel->save()) {
        $transaction->commit();
    } else {
        $transaction->rollBack();
    }
} catch (Exception $e) {
    $transaction->rollBack();
}
Run Code Online (Sandbox Code Playgroud)