Laravel工厂返回值(在afterCreating挂钩中)

时间:2018-10-30 12:29:39

标签: php laravel factories

我正在创建工厂,并使用“ 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的实例,但是没有。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

$factory->afterCreating(MyModel::class, function ($myModel, $faker) {
    $myModel->items()->save(factory(Item::class)->make());
});