Hy guys!
我想知道在播种数据透视表时是否有一种简单的方法可以避免重复。
我有这两个表:
类别
发表
和数据透视表:
category_post
我可以播种他们,它有效,我的关系正在工作两个。
一切正常,除了我的帖子属于多个类别。
所以我希望帖子只属于一个类别,当然类别会有更多帖子。
这就是我的category_post_seed文件的样子:
class CategoryPostTableSeeder extends Seeder {
public function run()
{
$faker = Faker::create();
$categoryIds = Category::lists('id');
$postIds = Post::lists('id');
foreach(range(1, 50) as $index)
{
DB::table('category_post')->insert([
'category_id' => $faker->randomElement($categoryIds),
'post_id' => $faker->randomElement($postIds)
]);
}
}
}
感谢您的帮助。
答案 0 :(得分:2)
您可以使用sync()
删除数据透视表中针对特定帖子/类别的所有行,然后为数组中的每个项目添加一行。在这种情况下,你只给它一个项目。
$category = Category::find(1);
$category->posts()->sync(array($somePostID));
$faker = Faker::create();
$categoryIds = Category::lists('id');
$postIds = Post::lists('id');
foreach(range(1, 50) as $index)
{
$category = Category::find($faker->randomElement($categoryIds));
$category->posts()->sync(array($faker->randomElement($postIDs)));
}