在保存模型之前在 YII 中获取模型 ID

get model id in YII before saving the model

在回答我的问题之前,请先看看我的控制器。

这是我的控制器:

public function actionTambahKnowledge(){
    $model = new Dokumen;

    if(isset($_POST['Dokumen']))
    {
        $model->attributes=$_POST['Dokumen'];
        if($model->validate()){

            if(Yii::app()->vsm->preprocessing_kata($model->id)){ //LINE X
                $model->save(false)

                Yii::app()->user->setFlash('tambahknowledge','Knowledge baru berhasil ditambahkan');
                $this->redirect(array('tambahKnowledge'));

            }
        }
    }
     $this->render('tambahKnowledge',array('model'=>$model));
}

LINE X 中,我想获取 Yii::app()->vsm->preprocessing_kata 方法的模型 ID。但是,我只知道$model->id可以在执行完$model->save之后生成。在这里,如果 LINE X 中的方法已成功执行,我想保存模型。如果该方法成功,该方法将 return true

我有一个替代方案: 为了获得模型 ID,所以我必须在模型数据库中查询最新的 ID,并将其用于该方法。但是我担心是否有其他人同时访问 actionTambahKnowledge。因此从数据库中检索到的模型 ID 变得不一致。例如,Mr.X 访问 actionTambahKnowledge。我假设 Mr.X 的模型 ID 等于 1。但与此同时,Mr.Y 也访问了该操作并且 Mr.Y 获得了相同的 ID,因为 Mr.X 尚未保存该操作。最终,Mr.X 成功保存了模型和具有正确模型 ID 的方法。 Mr.Y也成功保存模型和方法,但是Mr.Y填充的数据将替换Mr.X中的数据。

那么,我可以在不保存模型的情况下获取模型ID吗?以及如何使用正确的模型 ID 保存模型和方法,即使有其他人同时访问该操作?

谢谢,对不起我的英语:)

在保存之前无法访问模型 ID。但是您可以先将模型保存在 transaction 中,然后检查您的条件,如果不正确,则回滚事务:

$transaction=$model->dbConnection->beginTransaction();
$model->save(false);
if(Yii::app()->vsm->preprocessing_kata($model->id))
   $transaction->commit();
else
   $transaction->rollBack();