Ответ
Фабрики не используют метод создания модели для создания модели, в которой используется метод save
. Вы должны изменить свою фабрику следующим образом:
$factory->define(App\Teacher::class, function(Faker $faker) {
return [
'user_id' => function () {
return factory(App\User::class)->create()->id;
},
'budget' => $faker->numberBetween(100, 1000)
];
});
У вас уже должно быть UserFactory.php
, которое сгенерирует имя для связанного пользователя.
Дополнительные советы
Что касается переопределения функции создания в вашей модели, я настоятельно не рекомендую этот подход.
И где вы создаете свой teacher
в коде, я бы порекомендовал использовать этот подход:
// For example in TeacherController::store
$budget = 500;
$user_id = User::create(['name' => 'Peter Griffin'])->id;
$teacher = Teacher::create(compact('budget', 'user_id'));
Если вы обнаружите, что вам нужно сделать этот код в нескольких местах, то я бы предложил реализация нового метода в вашей модели (см. ниже) или создание класса обслуживания для его обработки:
class Teacher extends Model {
public static function createWithUser($name, $budget): Teacher
{
$user_id = User::create(compact('name'))->id;
return Teacher::create(compact('budget', 'user_id'));
}
}
// For example
$teacher = Teacher::createWithUser('Peter Griffin', 500);