Модель Laravel принадлежит фабрикам, отношения не работают

все у меня есть вопрос относительно Laravel Модельные заводы, у меня есть следующее определение фабрики.

$factory->define(Video::class, function (Faker\Generator $faker) {
return [
"title"         => $faker->unique()->text,
"description"   => $faker->text(),
"created_at"    => $faker->dateTimeThisYear
];
});

В основном эта модель имеет два belongsTo отношения с содержание а также Ресурсы таблицы, и определяет как таковой content_id и resource_id колонка.

Поэтому я ожидаю, что этот сеялка создаст контент, ресурс, а затем присоединит их к модели видео перед его созданием.

    factory(Video::class, 50)->create()->each(function($item) {
/** @var $item Video */
$item->content()->associate(factory(Content::class)->create());
$item->resource()->associate(factory(Resource::class)->create());
});

Однако это не работает, и я получаю сообщение об ошибке внешнего ключа content_id на videos Таблица. Что я здесь не так делаю? Любая помощь очень ценится 🙂

0

Решение

Я бы сделал это так: Создать фабрики для моделей и ссылаться на них с нового завода

$factory->define('App\Content', function(Faker\Generator $faker) {
return [
'body' => $faker->paragraph
];
});

$factory->define('App\Resource', function(Faker\Generator $faker) {
return [

];
});

$factory->define('App\Video', function (Faker\Generator $faker) {
return [
"title"         => $faker->unique()->text,
"content_id" => function() {
return factory('App\Content')->create()->id;
},
"resource_id" => function() {
return factory('App\Resource')->create()->id;
},
"description"   => $faker->text(),
"created_at"    => $faker->dateTimeThisYear
];
});

Я предполагаю, что ваш класс Video находится в пространстве имен под App. Вы можете удалить пространство имен приложения, если ваши классы не имеют пространства имен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]