在将数据添加到数据库之前,如何跳过重复值?

时间:2018-01-26 11:30:08

标签: php laravel

我有收藏夹程序表。我将使用ajax查询将数据库收藏的programm id添加到具有用户ID的表中。如何使用当前用户ID跳过重复的程序ID。 我现在创建此方法以跳过重复值但不能调用:

public function test($programm_id){
    $fav = new \App\Favorite;
    $user_id = Auth::id();
    $fav_count = $fav::where('id_user', Auth::user()->id)->count();
    $getFavorites = $fav::where('id_user', $user_id)->get()->toArray();
    $userProgramms = $fav->where('id_user', $user_id)->select('id_program')->get()->toArray();
    $bool = true;
    foreach ($userProgramms as $array) {
        foreach ($array as $value) {
            if($value === $programm_id) $bool = false;
        }
    }

    if($fav_count <= 5){   
        if ($bool){
             $fav->id_user = Auth::user()->id;
             $fav->id_program = $programm_id; 
             $fav->save();
        }                  
    }
}

这是我的表:

enter image description here

请在此控制器中查看我的方法favorite()Controller

我的更新代码无法更多1次保存到数据库。

$fav = new \App\Favorite;
$fav_count = $fav::where('id_user', Auth::user()->id)->count();
if($fav_count <= 5)
{
  $fav->updateOrInsert(['id_user' => Auth::id()], ['id_program' => $post['id_program']]);
}

每个用户都可以添加到表格最多6个最喜欢的ID程序

2 个答案:

答案 0 :(得分:0)

在表格上添加唯一索引:

macos_10_13

并使用INSERT INTO ... OR UPDATE

ALTER TABLE `tableName` ADD UNIQUE `unique_index`(`id_user`, `id_program`);

如果没有INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE t1 SET c=c+1 WHERE a=1; id_user值相同的记录,那么您的查询将以这种方式插入新记录,以防它出现问题。在该行上执行更新。

答案 1 :(得分:0)

如果您想在PHP中执行此操作并假设您的值存储在数组中,则可以使用array_unique()

请在此处查看:http://php.net/manual/en/function.array-unique.php