3

在 Yii2 中保存新模型/活动记录后,我正在文件系统上安排作业。我在 afterSave 中执行此操作,我想使用我返回的调度程序的作业 ID 更新记录。

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

4

2 回答 2

5

您可以使用updateAttributes($attributes)

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

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

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

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

于 2016-11-01T21:13:45.073 回答
0

我在那里看到两个选项:

  1. 在模型中创建额外的内部字段,例如private $task_sended = false;In afterUpdate set task_sended = true 并检查它

    if (!$this->task_sended){ //发送任务到调度器 $this->task_sended = true; }

  2. 使用 DAO 命令更新模型

    \Yii::$app->db->createCommand()->update(self::tableName(), $update, ['id'=>$this->id])->execute();

于 2014-04-29T11:52:45.573 回答