Yii2 で新しいモデル / アクティブなレコードを保存した後、ファイルシステムでジョブをスケジュールしています。afterSave でこれを行い、取得したスケジューラのジョブ ID でレコードを更新したいと思います。
しかし、正しいプロパティをジョブ ID に設定した後、モデルで $this->update() を呼び出すと、更新が行われません。afterSave() で update() を使用するのはおそらく悪い考えですが、これに取り組む正しい方法は何でしょうか?
Yii2 で新しいモデル / アクティブなレコードを保存した後、ファイルシステムでジョブをスケジュールしています。afterSave でこれを行い、取得したスケジューラのジョブ ID でレコードを更新したいと思います。
しかし、正しいプロパティをジョブ ID に設定した後、モデルで $this->update() を呼び出すと、更新が行われません。afterSave() で update() を使用するのはおそらく悪い考えですが、これに取り組む正しい方法は何でしょうか?
そこに2つのオプションがあります:
モデルに追加の内部フィールドを作成します。たとえば、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->id])->execute();