2015-09-20 183 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',然後再試一次 –

相關問題