Laravel:每个外键都有唯一的外键(user_id)

问题描述 投票:0回答:1

我有一个 UserCategoryFollows 表,其中有一个与用户相关的

user_id
和一个与类别相关的
category_id

用户可以关注任意数量的类别,但我不想为相同的

category_id
user_id
插入多行。

例如,我不希望这个出现在我的数据库中:

user_id     category_id
1           2
2           1
2           3
1           4
2           1   <---- Duplicate
1           2   <---- Duplicate

这是我可以在模型内部验证的东西还是通过控制器完成的验证?

我目前正在播种:

public function run()
    {

        $catCount = App\Category::count();
        $faker = \Faker\Factory::create();
        $follows = [];

        for ($i = 0; $i < 100; $i++) {
            $user_id = App\User::all()->random()->id;
            $category_id = $faker->numberBetween(1, $catCount);

            $follow = [
                'user_id' => $user_id,
                'category_id' => $category_id
            ];


                array_push($follows, $follow);



        }



        foreach ($follows as $follow) {
            App\UserCategoryFollow::create($follow);
        }

    }

我可以更改我的数组以剔除重复项,但我认为如果可能的话最好在模型上进行处理。

php laravel model
1个回答
2
投票

最初,您希望将此行添加到您的迁移文件(此步骤是可选,但最好实现它以确保数据完整性)

$table->unique(['user_id', 'category_id']);

其次,根据您的 user_id 和类别 id 使用 firstOrCreate 自动避免插入非唯一值

    for ($i = 0; $i < 100; $i++) {
        $user_id = App\User::all()->random()->id;
        $category_id = $faker->numberBetween(1, $catCount);
        App\UserCategoryFollow::firstOrCreate( ['user_id' => $user_id,'category_id' => $category_id]);
    }
© www.soinside.com 2019 - 2024. All rights reserved.