Laravel:如何在将一组数据插入mysql时排除重复记录?

时间:2017-09-06 18:48:50

标签: php mysql laravel

我正在使用Laravel 5.5,我想在将一组数据插入mysql时排除重复记录。

例如,有一个表students,它包含以下字段:

id
name
gender

现在我将一组数据插入students,如果不介意重复记录,我可以这样做:

public function insert()
{
    $newStudents=[
        ['name'=>'Jim','gender'=>'boy'],
        ['name'=>'Lucy','gender'=>'girl'],
        ['name'=>'Jack','gender'=>'boy'],
        ['name'=>'Alice','gender'=>'girl']
    ];

    DB::table('students')->insert($newStudents);
}

现在我不想插入重复的记录。(副本是:namegender都有相同的值,而不是一个字段具有相同的值。)

我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以使用独特的集合助手。请参阅以下代码:

 $newStudents=collect([
    ['name'=>'Jim','gender'=>'boy'],
    ['name'=>'Lucy','gender'=>'girl'],
    ['name'=>'Jack','gender'=>'boy'],
    ['name'=>'Alice','gender'=>'girl'],
     ['name'=>'Alice','gender'=>'girl']
    ])->unique(function ($student) {
        return $student['name'].$student['gender'];
    })->toArray();

    DB::table('students')->insert($newStudents);

上面的代码只会插入唯一的记录,即使那里有重复的记录。

有关详细信息,请参阅此处:https://laravel.com/docs/5.4/collections#method-unique

答案 1 :(得分:0)

您可以在数据库中为名称和性别创建唯一索引。但是,当你尝试保存它们时,你会得到我猜错的MySQL错误。因此,您可以使用unique进行where验证。

Validator::make($student, [
    'gender' => [
        'required',
        Rule::in(['boy', 'girl']),
    ],
    'name' => Rule::unique('students')->where(function ($query) use ($student) {
        $query->where('gender', $student['gender']);
    })
]);

然后,您可以运行您的收藏并过滤掉那些在@ pseudoanime的答案中无效的内容。