我想通过 afterSave
方法更新 inserted raw 中的一个字段,所以我在 Driver Model 中开发了以下代码
protected function afterSave() {
parent::afterSave();
if ($this->isNewRecord) {
$newid = self::newid($this->id);
$this->updateByPk($this->id, new CDbCriteria(array('condition'=>'driverid = :driverid', 'params'=>array('driverid'=> $newid))));
}
}
在Controller中crud制作的方法:
public function actionCreate()
{
$model=new Driver;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Driver']))
{
$model->attributes=$_POST['Driver'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
为什么保存后不起作用?
编辑:
private static function CheckNumber($number) {
$array = array(10);
for ($i = 0; $i < 10; $i++)
$array[$i] = 0;
do {
$array[$number % 10]++;
$number /= 10;
} while ((int) ($number / 10 ) != 0);
$array[$number]++;
for ($i = 0; $i < 10; $i++)
if ($array[$i] > 1)
return false;
return true;
}
public static function newid($id) {
while (self::CheckNumber($id) == FALSE) {
$id++;
}
return $id;
}
最佳答案
你的 updateByPk 搞砸了..
因为不清楚你想做什么..所以我假设你想通过刚刚插入的行的 self::newid($this->id);
的结果更新 driver_id 值..
你应该做的是:
protected function afterSave() {
parent::afterSave();
if ($this->isNewRecord) {
$newid = self::newid($this->id);
$this->driverid = $new_id;
$this->isNewRecord = false;
$this->saveAttributes(array('driverid'));
}
}
是的,您对 afterSave()
的用法是正确的
isNewRecord is true even after new record is created, but after first time, it will be false always..
关于php - 简单的 afterSave 方法在 Yii 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176631/