如果数据存在,则更新,否则插入新数据
我是Laravel中的新成员。我想从数组中插入数据到数据库中。我的数据被插入到数据库中,但是当数据存在于数据库中时,相同的数据会上载到数据库中。我只想插入不在数据库中的新数据。如果数据存在,则更新,否则插入新数据
$str=$this->entry();
$end=$this->exit_entry();
$st=array_chunk($str,5);
$ex=array_chunk($end,5);
$result=array();
foreach($st as $v1){
$tmp = array(
'Employee_id'=>$v1[0],
'Employee_name'=>$v1[1],
'Date' => $v1[2],
'Day' =>$v1[3],
'Time1' => $v1[4]
);
foreach($ex as $v2){
if($v2[1] == $v1[1] && $v2[0] == $v1[0] && $v2[2] == $v1[2] && $v2[3] == $v1[3] ){
$tmp['Time2']=$v2[4];
}
}
$result[] = $tmp;
}
foreach($result as $res) {
$res1 = EmployeeList::insert($res);
}
//var_dump($res1);
有两种方法可以解决这个问题,这取决于你想要做什么;使用firstOrCreate()
和firstOrNew()
。
firstOrCreate()
将检查所有进入它的值,并且如果它们全都与已经存在的记录相匹配,那么它将返回一个结果,否则它将使用传递的参数创建一个新记录。
与firstOrCreate
捕捉的是,如果其中一个参数不匹配,它会创建一个新的实例。例如,如果您制作了两个只有Employee_name
拼写不同的插入,则会创建一个新实例,即使Employee_id
未更改。
另一个选项是firstOrNew()
,它执行相同的检查,如果找不到结果,则返回一个模型实例供您使用。但是,您需要通过拨打save()
来手动保存。
这些使用:
$res1 = EmployeeList::firstOrCreate($res);
$res1 = EmployeeList::firstOrNew($res); $res1->save();
如果你可以让插件,而无需玩弄什么是插入到模型,然后用firstOrCreate()
去,如果你想改变或选择输入到模型中的东西,那么去firstOrNew()
如果你是在两者之间的更多信息之后,那么这post总结得很好。
我认为这样如果数据已经存在,您的问题就会更新。因此,这是你可以做什么:
$res1 = EmployeeList::firstOrCreate($res);
但是,只有当你的Employee_id
被设置成主键这部作品。
firstOrCreate()函数正在工作。首先,我将表单数据插入到数据库中,然后将此数据库数据插入到问题中给出代码的新数据库中。当我每次提交表格时,新数据都会在之前的数据之后输入到第二个数据库中。如果数据库中有相同的数据,我只想将数组的新值更新到数据库 – Alien
@Alien也许你的'Employee_id'没有设置为索引。请尝试将其设置为索引,并且您应该明白您的意思。 –
只需运行一个'migrate:rollback',然后再试一次 –
这是数据库中唯一的字段? –
我的意思是'Employee_ID'? –
我认为firstorcreate()函数将帮助你,而不是插入(),谷歌一次 –