如何确保只有一条记录处于活动状态

时间:2014-05-12 15:52:08

标签: cakephp

我希望在保存记录并将其标记为活动时,所有其他记录都标记为“非活动”。

我在我的模型中尝试了以下代码:

public function beforeSave($options = array()) {
    if (!empty($this->data['Ticket']['is_active'])) {
        $this->data['Ticket']['is_active'] = 0;     
    }
    return true;
}

但是此代码错误

2 个答案:

答案 0 :(得分:2)

使用afterSave

而不是使用beforeSave,使用afterSaveupdateAll更合适:

public function afterSave($created) {
    if (!empty($this->data[$this->alias]['is_active'])) {
        $this->updateAll(
            array('is_active' => 0),
            array(
                'id !=' => $this->id,
                'is_active' => 1
            )
        );
    }
}

即。 成功保存 记录后,如果已激活则禁用所有其他记录。

注意:请确保使用与父类相同的方法签名。它取决于您使用的CakePHP版本

答案 1 :(得分:0)

您可以在保存方法之前编写

public function beforeSave($options=array()){

 if (!empty($this->data[$this->alias]['is_active'])) {

                $this->data[$this->alias]['is_active'] = 0;

        }
        return true;

}