3

私の問題を例を挙げて説明しています。

私のモデルクラスはUserで、オブザーバークラスはUserObserverです。

モデル関数が使用されるたびに実行されるコードをupdatedメソッドに追加しました。たとえば、 (下記)のメソッドは、レコードで更新が発生するたびに呼び出される必要があります。UserObserverUserupdateupdatedUserObserverUser

class UserObserver{
   function updated($userModel)
   {
      //Send mail code
   }
}

以下に示すようにデータが更新されると、コードはUserObserver機能します。User

User::find(2)->update(['name'=>'Update Name']);

ただし、データが次のように更新されると、 のコードはUserObserver実行されません。User

User::where('id', 2)->update(['name'=>'Update Name']);

デバッグすると、モデルオブジェクトが返され、User::find(2)オブジェクトが返されることがわかります。では、モデル オブジェクトまたはオブジェクトのどちらを使用して更新されたかに関係なく、オブザーバー クラス メソッドをどのように利用できますか?UserUser::where('id', 2)BuilderUserBuilder

問題は、既存のアプリケーションがあり、一部のモデルが のように更新されていることですUser::where('id', 2)->update(['name'=>'Update Name']);。update ステートメントを に変更するのは難しい作業User::find(2)->update(['name'=>'Update Name']);です。

4

3 に答える 3

0

親愛なるオブザーバーは、モデル オブジェクトまたはビルダー オブジェクトに依存しません。それは両方のステートメントで機能します...

User::find(2)

User::where('id', 2)

昨日同じ問題に直面していますが、先週の月曜日に改訂可能なパッケージをインストールし、そのパッケージを調べると、コードで動作します"User::where('id', 2)"

実際、私は自分のコードをupdated()メソッドに配置していますが、同じコードをsaveing()メソッドに配置すると、うまくいきます...

于 2016-02-25T04:34:46.563 に答える