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)
因此,只需重复我一开始所说的问题:
感谢您对理解此过程的任何指导,谢谢!
数据库中保存了有关Model的3个事件。这些created,updated和saved。
created 首次保存模型时调用。
updated 在任何后续时间保存模型时都会调用。
saved 保存模型时(包括首次创建模型时)都会调用。
包罗万象saved。
此外,刚创建模型时,其wasRecentlyCreated属性设置为true。
因此,如果只有一个saved事件,则仍然可以通过检查该属性来处理创建和更新之间的差异。
至于如何处理代码,这取决于您。
就个人而言,如果我有一些仅在创建模型时才需要的代码,则可以使用该方法。对于更新同样。
但是,如果每次保存模型时都需要发生一些共享代码,但是在创建模型时还需要一些特殊的东西,那么我就不会创建单独的created事件,只需要使用saved并检查即可wasRecentlyCreated。