php - 简单的 afterSave 方法在 Yii 中不起作用

标签 php mysql activerecord yii

我想通过 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 搞砸了..

Check Documentation

因为不清楚你想做什么..所以我假设你想通过刚刚插入的行的 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..

From Yii Forum said By Qiang Himself..

关于php - 简单的 afterSave 方法在 Yii 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176631/

相关文章:

mysql - 事件记录 : LEFT OUTER self-JOIN with conditions on joined table

php - 使用 foreach() 遍历对象并更改值

mysql - Spring 存储库中的自定义查询

php - 如何在PHP中创建动态矩阵?

ruby-on-rails - 获取 Rails 中 date.year == some_year 的记录

ruby-on-rails - 更多 ruby​​ 方法来计算符合条件的对象

php - 这5张表的SQL查询怎么写?

php - 如何分组更新mysql数据库字段(使用GROUP BY)

php - Cakephp,选择前 5 个结果,然后将其余结果分组到 "Other"?

php - 如何通过 MySQL 查询使用 BirthDate 列获取以月为单位的年龄?