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

时间:2015-04-22 22:20:26

标签: php postgresql yii

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

这是我的控制者:

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中的方法已成功执行,我想保存模型。如果方法成功,该方法将返回true

我有另一种解决方案: 为了获取模型ID,我必须查询模型数据库中的最新ID,并将其用于该方法。但我担心是否有其他人同时访问actionTambahKnowledge。因此,从数据库中检索的模型ID变得不一致。例如,Mr.X访问actionTambahKnowledge。我假设Mr.X的模型ID等于1。但是同时,Y先生也可以访问这个动作而且Mr.Y得到相同的ID,因为Mr.X还没有保存动作。最后,Mr.X成功地使用正确的型号ID保存了模型和方法。除了模型和方法之外,Y先生也取得了成功,但是Mr.Y填充的数据将取代Mr.X的数据。

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

感谢和抱歉我的英语:)

1 个答案:

答案 0 :(得分:1)

在保存之前没有任何方法可以访问模型ID。但您可以先将模型保存在事务中,然后检查您的情况,如果不是,则回滚事务:

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