我正在创建工厂,并使用“ afterCreating”钩子插入一些关系。
这是代码:
$factory->define(MyModel::class, function (Faker $faker) {
return [
'name' => $faker->name
];
});
$factory->afterCreating(MyModel::class, function ($my_model, $faker) {
// Make changes to my model, add relationships to it
return $my_model; // or return "test"
});
我的问题是如何返回修改后的模型,即afterCreating()中修改过的模型?甚至有可能这样做吗?
我得到的是在第一种方法中创建的原始模型。 Laravel Documentation API声明它返回$ this,告诉我它是afterCreating的实例,但是没有。
谢谢!
答案 0 :(得分:0)
您正在将方法afterCreating
的返回值与回调函数的返回值混合在一起。
要回答您的问题:是的,有可能,并且您已经编写了正确的版本。
答案 1 :(得分:0)
使用afterMaking
和afterCreating
方法注册工厂回调,并允许您在创建或创建模型后执行其他任务。
方法afterCreating
的返回值为$this,这意味着实例化模型(如果受影响)已经基于创建后函数中的操作。例如,这些回调是一种通过工厂创建新模型后自动保存关系数据的干净方法。
$factory->afterCreating(MyModel::class, function ($myModel, $faker) {
$myModel->items()->save(factory(Item::class)->make());
});