Возвращаемое значение фабрики Laravel (в обработчике afterCreating) - PullRequest
0 голосов
/ 30 октября 2018

Я создаю фабрику и использую ловушку 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 ()? Возможно ли это сделать?

То, что я получаю, это оригинальная модель, созданная в первом методе. API документации Laravel заявляет, что возвращает $ this, что говорит мне, что это экземпляр afterCreating, но это не так.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Заводские обратные вызовы регистрируются с использованием методов afterMaking и afterCreating и позволяют выполнять дополнительные задачи после создания или создания модели.

Возвращаемое значение метода afterCreating равно $ this , что означает, что экземплярная модель (если она затронута) уже основана на действии внутри функции afterCreating. Эти обратные вызовы являются, например, чистым способом автоматического сохранения реляционных данных после создания новой модели на заводе.

$factory->afterCreating(MyModel::class, function ($myModel, $faker) {
    $myModel->items()->save(factory(Item::class)->make());
});
0 голосов
/ 30 октября 2018

Вы смешиваете возвращаемое значение метода afterCreating с возвращаемым значением вашей функции обратного вызова. Чтобы ответить на ваш вопрос: да, это возможно, и вы уже написали правильную версию.

...