雄辩的模型事件被保存并创建,使用create时都会调用这两个事件?

haa*_*kym 1 php events laravel eloquent

关于使用Eloquent模型事件,我想知道模型事件如何响应方法调用,是否与特定事件(公共事件)有任何重叠,如果存在,如何处理此类事件的代码?

例如,如果我有一个要create()Model::create($array)后台调用的模型(即据我了解),则当我调用create()save()方法时,将如docs所示进行调用:

/**
 * Save a new model and return the instance.
 *
 * @param  array  $attributes
 * @return static
 */
public static function create(array $attributes = [])
{
    $model = new static($attributes);
    $model->save();
    return $model;
}
Run Code Online (Sandbox Code Playgroud)

因此请牢记这一点,如果我希望为and 事件提供相同的行为,那么我会为事件简单地创建一个事件,而不必担心该事件,因为该方法是该方法的包装(如上所示) )。所以我可以这样做:saved()created()saved()created()create()save()

public static function boot()
{
    parent::boot();

    // covers created and saved events, as create() method triggers save()
    static::saved(function($model) {
        // do xyz
    });
}
Run Code Online (Sandbox Code Playgroud)

还是我需要创建两个单独的方法来侦听这两个事件?像这样:

public static function boot()
{
    parent::boot();

    static::created(function($model) {
        // do xyz
    });

    static::saved(function($model) {
        // do xyz
    });
}
Run Code Online (Sandbox Code Playgroud)

因此,只需重复我一开始所说的问题:

  • 模型事件如何响应方法调用
  • 与特定事件是否有重叠(常见事件,如上所述)
  • 如果有,如何实际地为此类事件编写代码

感谢您对理解此过程的任何指导,谢谢!

Mat*_*ald 5

数据库中保存了有关Model的3个事件。这些createdupdatedsaved

created 首次保存模型时调用。

updated 在任何后续时间保存模型时都会调用。

saved 保存模型时(包括首次创建模型时)都会调用。

包罗万象saved

此外,刚创建模型时,其wasRecentlyCreated属性设置为true。

因此,如果只有一个saved事件,则仍然可以通过检查该属性来处理创建和更新之间的差异。

至于如何处理代码,这取决于您。

就个人而言,如果我有一些仅在创建模型时才需要的代码,则可以使用该方法。对于更新同样。

但是,如果每次保存模型时都需要发生一些共享代码,但是在创建模型时还需要一些特殊的东西,那么我就不会创建单独的created事件,只需要使用saved并检查即可wasRecentlyCreated