【问题标题】:Laravel Eloquent Events ImplementationLaravel Eloquent 事件实现
【发布时间】:2018-01-23 07:10:05
【问题描述】:

我正在更新我的模型实例或像这样插入一个新实例:

$model = Model::updateOrCreate([id' => $request['id']],
$model_to_update_array);

我只想在现有的模型实例('tourist')更新时执行一些代码(而不是在创建新实例或没有任何更改时)。

我已阅读 https://laravel.com/docs/5.4/eloquent#events 关于 Eloquent 事件的内容,在我看来,我需要使用 updatedupdating 事件。据我了解,这些事件是 Laravel 中“内置”的,所以我不必从这里使用很多东西:https://laravel.com/docs/5.4/events

我还没有找到说明如何实现 Eloquent 事件的教程。由于我对事件概念完全陌生,因此我很难理解如何使用它们。任何人都可以删除一个关于 Eloquent 事件(不是一般事件,而是特别是 Eloquent 事件)的好教程的链接,或者可以在这里简要解释一下?

提前谢谢你!

【问题讨论】:

    标签: laravel events eloquent laravel-events


    【解决方案1】:

    为特定模型添加 Eloquent 事件的最简单方法是覆盖其 boot() 方法:

    protected static function boot()
    {
        parent::boot();
    
        static::updating(function ($model) {
    
        });
    }
    

    当您将其放入模型时,匿名函数将在每次更新模型时运行。请注意,调用 static::updating()static::updated() 之间存在差异,具体取决于您要执行代码的时间。

    【讨论】:

    • 谢谢你,堕落者。我在哪里可以了解差异(更新、更新)?
    • @SergejFomin,文档没有说太多,但基本上*ing 事件在实际事件之前被调用,*ed 在事件之后被调用。因此,在您的情况下,如果您将代码放在 static::updating() 中,它将在实际数据库更新之前运行,而在 static::updated() 中,它将在此之后运行。
    • 嗨!所以我在我的模型中加入了受保护的静态函数 boot()....如何使用它来检查模型是否在 Controller 中更新?
    • @SergejFomin,请用相关控制器代码发布另一个问题。
    • 我发布了一个新问题:stackoverflow.com/questions/45698659/…
    【解决方案2】:

    @TheFallen 在 StackOverflow 上的另一个帖子中对这个问题给出了很好的回答,如果您对彻底解释的解决方案感兴趣,请阅读:

    Laravel Eloquent Events - implement to save model if Updated

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2019-07-08
      • 2013-02-12
      • 2021-09-19
      相关资源
      最近更新 更多