2015-09-20 186 views
1

我是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); 
+0

这是数据库中唯一的字段? –

+0

我的意思是'Employee_ID'? –

+1

我认为firstorcreate()函数将帮助你,而不是插入(),谷歌一次 –

回答

0

有两种方法可以解决这个问题,这取决于你想要做什么;使用firstOrCreate()firstOrNew()

firstOrCreate()将检查所有进入它的值,并且如果它们全都与已经存在的记录相匹配,那么它将返回一个结果,否则它将使用传递的参数创建一个新记录。

firstOrCreate捕捉的是,如果其中一个参数不匹配,它会创建一个新的实例。例如,如果您制作了两个只有Employee_name拼写不同的插入,则会创建一个新实例,即使Employee_id未更改。

另一个选项是firstOrNew(),它执行相同的检查,如果找不到结果,则返回一个模型实例供您使用。但是,您需要通过拨打save()来手动保存。

这些使用:

  • $res1 = EmployeeList::firstOrCreate($res);
  • $res1 = EmployeeList::firstOrNew($res); $res1->save();

如果你可以让插件,而无需玩弄什么是插入到模型,然后用firstOrCreate()去,如果你想改变或选择输入到模型中的东西,那么去firstOrNew()

如果你是在两者之间的更多信息之后,那么这post总结得很好。

0

我认为这样如果数据已经存在,您的问题就会更新。因此,这是你可以做什么:

$res1 = EmployeeList::firstOrCreate($res); 

但是,只有当你的Employee_id被设置成主键这部作品。

+0

firstOrCreate()函数正在工作。首先,我将表单数据插入到数据库中,然后将此数据库数据插入到问题中给出代码的新数据库中。当我每次提交表格时,新数据都会在之前的数据之后输入到第二个数据库中。如果数据库中有相同的数据,我只想将数组的新值更新到数据库 – Alien

+0

@Alien也许你的'Employee_id'没有设置为索引。请尝试将其设置为索引,并且您应该明白您的意思。 –

+0

只需运行一个'migrate:rollback',然后再试一次 –

相关问题