Yii2从afterSave触发模型/记录更新

时间:2014-04-28 22:18:04

标签: php activerecord yii2

在Yii2中保存新的模型/活动记录后,我正在调度文件系统上的作业。我在afterSave中这样做,我想用我回来的调度程序的作业ID更新记录。

但是,在将正确的属性设置为作业ID后,在模型中调用$ this-> update()时,不会发生更新。在afterSave()中使用update()可能是一个坏主意,但是什么才是解决这个问题的正确方法?

2 个答案:

答案 0 :(得分:3)

您可以使用updateAttributes($attributes)

  

当数据验证不是时,此方法是update()的快捷方式   需要,只需要更新一小部分属性。

     

您可以将要更新的属性指定为名称列表或   名称 - 值对。如果是后者,则对应属性值   将相应修改。然后该方法将保存指定的   属性到数据库。

     

请注意,此方法执行数据验证,   触发事件。

http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#updateAttributes()-detail

答案 1 :(得分:0)

我在那里看到两个选项:

  1. 在模型中创建其他内部字段,例如private $task_sended = false;在afterUpdate中设置task_sended = true并检查它

    if(!$ this-> task_sended){     //将任务发送给调度程序     $ this-> task_sended = true; }

  2. 使用DAO命令更新模型

    \ Yii :: $ app-> db-> createCommand() - > update(self :: tableName(),$ update,[' id' => $ this-&gt ; ID]) - >执行();