在Yii2中保存新的模型/活动记录后,我正在调度文件系统上的作业。我在afterSave中这样做,我想用我回来的调度程序的作业ID更新记录。
但是,在将正确的属性设置为作业ID后,在模型中调用$ this-> update()时,不会发生更新。在afterSave()中使用update()可能是一个坏主意,但是什么才是解决这个问题的正确方法?
答案 0 :(得分:3)
您可以使用updateAttributes($attributes)
当数据验证不是时,此方法是
update()
的快捷方式 需要,只需要更新一小部分属性。您可以将要更新的属性指定为名称列表或 名称 - 值对。如果是后者,则对应属性值 将相应修改。然后该方法将保存指定的 属性到数据库。
请注意,此方法不执行数据验证,不 触发事件。
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#updateAttributes()-detail
答案 1 :(得分:0)
我在那里看到两个选项:
在模型中创建其他内部字段,例如private $task_sended = false;
在afterUpdate中设置task_sended = true并检查它
if(!$ this-> task_sended){ //将任务发送给调度程序 $ this-> task_sended = true; }
使用DAO命令更新模型
\ Yii :: $ app-> db-> createCommand() - > update(self :: tableName(),$ update,[' id' => $ this-&gt ; ID]) - >执行();