php - Laravel 雄辩的多属于播种
问题描述
我有三个模型User
,Category
和Article
。
Article
属于 aUser
和 a 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
or传递user_id
给工厂调用?
有没有更好的方法来实现这一点?
提前致谢
解决方案
您可以通过将具有所需属性的数组传递给make()
方法来覆盖工厂的属性:
改变
$user->articles()->createMany(
factory(Article::class, 3)->make()->toArray()
);
到
$user->articles()->createMany(
factory(Article::class, 3)->make([
'category_id' => $category->id
])->toArray()
);
覆盖category_id
属性。
https://laravel.com/docs/6.x/database-testing#using-factories
推荐阅读
- json - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON 写入中的类型无效(MSGraphDateTimeTimeZone)”
- machine-learning - ImageAI 理解输出
- excel - 从调度程序运行时,PowerShell 脚本无法打开 CSV/excel 文件
- html - 将 CSS 样式添加到复选框的父 div
- r - R 编程:用于插补但库错误的 MICE 包 --> 名称空间 'tibble' 但 >= 3.0.0 是必需的
- amazon-mws - 我是一名承包商,为一家在亚马逊上销售的公司工作。我可以使用他们的 MWS 根凭据吗?
- php - 创建 JSON 对象并使用 PHP CURL 访问它在解码时返回空白
- node.js - Mongodb、Reactjs、Express、Node js Heroku 部署显示空白页和 404 错误。在本地工作
- javascript - 在 React 测试库中的 Ant Design Slider 上触发 onChange 函数不起作用
- java - 从 Java 中的控制台读取时如何设置默认输入?