Php Laravel:在mysql中插入一组数据时,如何排除重复记录?
我使用的是Laravel5.5,我想在将一组数据插入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
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']
,我该怎么办?