Я создаю фабрику и использую ловушку 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, но это не так.
Спасибо!
Вы путаете возвращаемое значение метода afterCreating
с возвращаемым значением вашей функции обратного вызова.
Чтобы ответить на ваш вопрос: да, это возможно, и вы уже написали правильную версию.
Заводские обратные вызовы регистрируются с помощью afterMaking
а также afterCreating
методы и позволяют выполнять дополнительные задачи после создания или создания модели.
Возвращаемое значение метода afterCreating
является $ this- Это означает, что экземплярная модель (если она затронута) уже основана на действии внутри функции afterCreating. Эти обратные вызовы являются, например, чистым способом автоматического сохранения реляционных данных после создания новой модели на заводе.
$factory->afterCreating(MyModel::class, function ($myModel, $faker) {
$myModel->items()->save(factory(Item::class)->make());
});