2015-04-22 76 views
1

在转到我的问题之前,请先看看我的控制器。在保存模型之前在YII中获取型号ID

这是我的控制器:

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,我想要得到的模型ID为Yii::app()->vsm->preprocessing_kata方法。但是,我只知道$model->id可以在执行$model->save后生成。在这里,如果LINE X中的方法已成功执行,我想保存模型。如果方法成功,该方法将返回true

我有一个替代解决方案: 为了获取模型ID,所以我必须查询模型数据库中的最新ID,并将其用于该方法。但是如果有人在同一时间访问actionTambahKnowledge,我很害怕。因此从数据库中检索的模型ID变得不一致。例如,Mr.X访问actionTambahKnowledge。我假设Mr.X的型号ID等于1。但是在同一时间,Y先生也访问这个动作,并且Y先生得到相同的ID,因为X先生没有保存动作。最后,Mr.X成功保存了具有正确型号ID的模型和方法。 Y先生也成功保存了模型和方法,但Y先生填写的数据将取代Mr.X的数据。

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

感谢和抱歉我的英语:)

回答

1

保存之前没有任何访问模型ID的方法。但是您可以首先将您的模型保存在交易中,然后检查您的条件,如果不是这样,则回滚交易:

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