1

我正在创建一个工厂并使用“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文档 API声明它返回 $this,它告诉我它是 afterCreating 的实例,但事实并非如此。

谢谢!

4

2 回答 2

1

您将方法afterCreating的返回值与回调函数的返回值混为一谈。回答您的问题:是的,这是可能的,并且您已经编写了正确的版本。

于 2018-10-30T12:51:20.243 回答
1

工厂回调使用afterMakingafterCreating方法注册,并允许您在制作或创建模型后执行其他任务。

该方法的返回值afterCreating$this,这意味着实例化模型(如果受到影响)已经基于函数 afterCreating 中的操作。例如,这些回调是一种在通过工厂创建新模型后自动保存关系数据的干净方式。

$factory->afterCreating(MyModel::class, function ($myModel, $faker) {
    $myModel->items()->save(factory(Item::class)->make());
});
于 2018-10-30T13:08:59.550 回答