Laravel种子数据透视表 - 如何避免重复?

时间:2014-06-30 19:46:46

标签: php laravel duplicates seed

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)
            ]);
        }
    }

}

感谢您的帮助。

1 个答案:

答案 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)));
    }