【发布时间】:2020-01-21 15:21:10
【问题描述】:
我有三个模型,User、Category 和 Article。
Article 属于User 和Category,其中外键user_id 和category_id 是not null。
我试图通过工厂相应地用假数据为数据库播种,这是播种代码...
// 2 categories and 12 articles, 6 per category
// TODO: A user should have 6 articles with mixed categories
// 3 from each category
// So we will have 2 users
factory(Category::class, 2)->create()->each(function($category) {
factory(User::class)->create()->each(function($user) use ($category) {
// How to assign an Article to $category or $user while creating?
$user->articles()->createMany(
factory(Article::class, 3)->make()->toArray()
); // category_id can't be null
// OR
$category->articles()->createMany(
factory(Article::class, 3)->make()->toArray()
); // user_id can't be null
});
});
我会得到两个错误之一,要么
列 user_id 没有默认值
或者
列 category_id 没有默认值
由于Article 表迁移,这是合乎逻辑的
$table->increments('id');
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->unsignedInteger('category_id');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
如何将category_id 或user_id 传递给工厂调用?
有没有更好的方法来实现这一点?
提前致谢
【问题讨论】:
-
像这样添加它们?
factory(Article::class, 3)->make(['category_id' => $category->id])->toArray()可以吗? -
@kerbholz 是的,谢谢,把它作为答案,我会投票并接受
标签: php mysql laravel laravel-seeding