在保存模型之前在 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();
在回答我的问题之前,请先看看我的控制器。
这是我的控制器:
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();