Laravel Eloquent ORM Factory:当我用工厂创建模型时,afterMaking 会在afterCreating 之前被调用吗?
Laravel Eloquent ORM Factory: Will afterMaking be called before afterCreating when I create a model with a factory;
根据 Laravel 的 documentation,您可以指定触发器 afterMaking
和 afterCreating
。但我无法弄清楚这些触发器何时被调用以及调用顺序如何
所以我有这个场景:
$myModel=factory(MyModel::class)->create();
有以下工厂:
use Faker\Generator as Faker;
use App\Model\MyModel
$factory->define(MyModel::class,function(Faker $faker){
return [
'sum'=>10
];
});
$factory->afterCreating(MyModel::class,function(MyModel $model, Faker $faker){
$model->sum=30;
$model->save();
});
$factory->afterCreating(MyModel::class,function(MyModel $model, Faker $faker){
$model->sum=30;
$model->save();
});
$factory->afterMaking(MyModel::class, function(MyModel $model, Faker $faker){
$model->sum=40;
});
那么以下哪些假设是正确的?
- 首先创建一个
MyModel
实例,然后调用afterMaking
闭包,然后将对象写入Db,最后调用afterCreating
。
- 首先创建一个
MyModel
实例,然后将对象写入Db,最后调用afterCreating
闭包。
- 先创建一个
MyModel
实例,然后调用afterCreating
闭包,然后将对象写入数据库。
create
方法在内部调用 make
。 make
将在创建实例后调用 callAfterMaking
。 create
将在存储记录后调用 callAfterCreating
。
所以,选项 1。
根据 Laravel 的 documentation,您可以指定触发器 afterMaking
和 afterCreating
。但我无法弄清楚这些触发器何时被调用以及调用顺序如何
所以我有这个场景:
$myModel=factory(MyModel::class)->create();
有以下工厂:
use Faker\Generator as Faker;
use App\Model\MyModel
$factory->define(MyModel::class,function(Faker $faker){
return [
'sum'=>10
];
});
$factory->afterCreating(MyModel::class,function(MyModel $model, Faker $faker){
$model->sum=30;
$model->save();
});
$factory->afterCreating(MyModel::class,function(MyModel $model, Faker $faker){
$model->sum=30;
$model->save();
});
$factory->afterMaking(MyModel::class, function(MyModel $model, Faker $faker){
$model->sum=40;
});
那么以下哪些假设是正确的?
- 首先创建一个
MyModel
实例,然后调用afterMaking
闭包,然后将对象写入Db,最后调用afterCreating
。 - 首先创建一个
MyModel
实例,然后将对象写入Db,最后调用afterCreating
闭包。 - 先创建一个
MyModel
实例,然后调用afterCreating
闭包,然后将对象写入数据库。
create
方法在内部调用 make
。 make
将在创建实例后调用 callAfterMaking
。 create
将在存储记录后调用 callAfterCreating
。
所以,选项 1。