gpt4 book ai didi

php - Eloquent 模型事件在使用 create 时被保存和创建?

转载 作者:行者123 更新时间:2023-12-05 00:49:46 26 4
gpt4 key购买 nike

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

例如,如果我有一个模型,我在后台调用 create(),即我理解的 Model::create($array) ,当我调用 create() 时,save() 方法被调用 as shown in the 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;
}

所以请记住这一点,如果我希望 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
});
}

或者我需要创建两个单独的方法来监听这两个事件吗?像这样:

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

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

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

所以只是重复我在开头提出的问题:

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

任何有关理解此过程的指导将不胜感激,谢谢!

最佳答案

有 3 个围绕模型保存在数据库中的事件。它们是 createdupdatedsaved

created在模型第一次保存时调用。

updated 在以后保存模型时调用。

saved 在模型被保存的任何时候(包括它第一次创建的时候)都会被调用。

所以 saved 是一个包罗万象的东西。

此外,当模型刚刚创建时,它会将 wasRecentlyCreated 属性设置为 true。

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

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

就个人而言,如果我有一些仅在创建模型时才需要的代码,我会使用该方法。更新也是如此。

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

关于php - Eloquent 模型事件在使用 create 时被保存和创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com