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

Php Laravel:在mysql中插入一组数据时,如何排除重复记录?,php,mysql,laravel,Php,Mysql,Laravel,我使用的是Laravel5.5,我想在将一组数据插入mysql时排除重复记录 例如,有一个表students,它有以下字段: id name gender 现在我将在学生中插入一组数据,如果不介意重复记录,我可以这样做: public function insert() { $newStudents=[ ['name'=>'Jim','gender'=>'boy'], ['name'=>'Lucy','gender'=>'girl

我使用的是Laravel5.5,我想在将一组数据插入mysql时排除重复记录

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

id
name
gender
现在我将在
学生中插入一组数据
,如果不介意重复记录,我可以这样做:

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);
}
现在我不想插入重复的记录。(重复的是:
name
gender
具有相同的值,没有一个字段具有相同的值)


我该怎么办?

您可以使用集合帮助器unique。见下面的代码:

 $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);
上面的代码将只插入唯一的记录,即使其中存在重复的记录


有关更多信息,请参见此处:

您可以为数据库中的姓名和性别创建唯一索引。然而,当你试图保存它们时,我猜你会得到一个MySQL错误。因此,您可以将
唯一的
验证用于
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的答案一样。

如果table
students
已经有了相同的记录,怎么做?例如,假设表
students
已经有一条记录
['name'=>'Jack','gender'=>'boy']
。现在在
$newStudents
中还有一个
['name'=>'Jack','gender'=>'boy']
,我该怎么办?