Php Yii2从afterSave触发模型/记录更新
在Yii2中保存了一个新模型/活动记录之后,我正在文件系统上安排一个作业。我在afterSave中这样做,我想用我得到的调度程序的作业id更新记录 但是,当我在为作业id设置了正确的属性之后在模型中调用$this->update()时,没有发生任何更新。在afterSave()中使用update()可能是个坏主意,但解决这个问题的正确方法是什么?我看到了两个选项:Php Yii2从afterSave触发模型/记录更新,php,activerecord,yii2,Php,Activerecord,Yii2,在Yii2中保存了一个新模型/活动记录之后,我正在文件系统上安排一个作业。我在afterSave中这样做,我想用我得到的调度程序的作业id更新记录 但是,当我在为作业id设置了正确的属性之后在模型中调用$this->update()时,没有发生任何更新。在afterSave()中使用update()可能是个坏主意,但解决这个问题的正确方法是什么?我看到了两个选项: 在模型中创建额外的内部字段,类似于private$task\u sended=false在afterUpdate中设置task_se
private$task\u sended=false代码>在afterUpdate中设置task_sended=true并检查
如果(!$this->task\u send){
//将任务发送到计划程序
$this->task_sended=true;
}
您可以使用
updateAttributes($attributes)
当未进行数据验证时,此方法是update()
的快捷方式
只需要更新一小部分属性
您可以将要更新的属性指定为名称列表或
名称-值对。如果为后者,则为相应的属性值
将进行相应的修改。然后,该方法将保存指定的
属性导入数据库
请注意,此方法将执行数据验证,并且将不
触发事件
这将是无限循环。在beforeSave()中执行此逻辑。这是有道理的,但我需要保存的记录的id传递给调度程序。所以BeforeSave()不是一个选项。你可以简单地覆盖
更新
,或者使用/override保存
@soju对不起,为Yii 2更新,我以为是Yii1@Alex谢谢,选项2很好用。但是,语法略有不同,能否将答案更新为\Yii::$app->db->createCommand()->update(self::tableName(),$update,['id'=>$this->id])->execute();$update是一个数组,其中包含要更新的列的key=>value对。