亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將參數傳遞給 laravel elequent 模型的事件觀察者

如何將參數傳遞給 laravel elequent 模型的事件觀察者

PHP
嗶嗶one 2022-10-22 16:24:36
我在 laravel 中有一個模型,我想在第一次創建模型對象后做一些事情。最簡單的方法是在我的模型類中添加一個靜態啟動方法,如下面的代碼:class modelName extends Model{      public static function boot()      {         parent::boot();         self::created(function ($model) {             //the model created for the first time and saved             //do something            //code here         });     }}到目前為止,一切都很好!問題是: created 方法接受的唯一參數是模型對象本身(根據文檔):這些方法中的每一個都接收模型作為它們唯一的參數。https://laravel.com/docs/5.5/eloquent#events創建模型后,我需要更多的參數。我怎樣才能做到這一點?或者在保證模型已經創建的同時,還有其他方法可以做某事嗎?laravel 版本是 5.5。
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

你很近。我可能會在您在控制器中實際創建模型之后立即調度一個事件。像這樣的東西。


class WhateverController

{

    public function create()

    {

        $model = Whatever::create($request->all());

        $anotherModel = Another::findOrFail($request->another_id);


        if (!$model) {

            // The model was not created.

            return response()->json(null, 500);

        }


        event(new WhateverEvent($model, $anotherModel));

    }

}


查看完整回答
反對 回復 2022-10-22
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

我在 eloquent 模型類中使用靜態屬性解決了這個問題:


class modelName extends Model

{

  public static $extraArguments;

  public function __construct(array $attributes = [],$data = [])

  {

     parent::__construct($attributes);

     self::$extraArguments = $data  ; 


  public static function boot()

  {

     parent::boot();


     self::created(function ($model) {

         //the model created for the first time and saved

         //do something

        //code here

         self::$extraArguments; // is available in here

     });

   }

}

有用!但我不知道它是否會導致應用程序中的任何其他不當行為。


在某些情況下,使用 laravel 事件也是一種更好、更清潔的方法。但是事件解決方案的問題是您無法確定模型是否已創建,是時候調用事件還是它仍處于創建狀態(而不是創建狀態)。


查看完整回答
反對 回復 2022-10-22
  • 2 回答
  • 0 關注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號