2013-10-30 81 views
1

我有一張桌子,我正嘗試使用save()方法來更新/創建線條。問題是它總是會創建新的行。下面的代碼給我每次運行它時大約有12行。他們在插入前沒有獨特的id,但nameDateTimeCode的組合是唯一的。有沒有辦法使用這兩個爲了讓laravel認出它們爲exist()?我是否應該考慮使用if exist而不是createupdateLaravel Eloquent ORM保存:更新vs創建

foreach ($x as $y) { 
    $model = new Model; 
    $model->name = ''.$name[$x]; 
    $model->DateTimeCode = ''.$DateTimeCode[$x]; 
    $model->value = ''.$value[$x]; 
    $model->someothervalue = ''.$someothervalue[$x]; 
    $model->save(); 
}; 

回答

4

我認爲,在這種情況下,你將需要更新或創建之前,尋找它:

foreach ($x as $y) { 
    $model = Model::where('name', name[$x])->where('DateTimeCode', DateTimeCode[$x])->first(); 

    if(! $model) 
    { 
     $model = new Model; 
     $model->name = ''.name[$x]; 
     $model->DateTimeCode = ''.DateTimeCode[$x]; 
    } 

    $model->value = ''.$value[$x]; 
    $model->someothervalue = ''.$someothervalue[$x]; 
    $model->save(); 
}; 
+0

工作大!! – Wistar

+0

現在,一個更好的解決方案可能是firstOrCreate。用於firstOrCreate的 – srph

5

我認爲這會在laravel 4.x的工作:

foreach ($x as $y) { 
    $model = Model::firstOrCreate(array('name' => name[$x], 'DateTimeCode' => DateTimeCode[$x])); 
    $model->value = ''.$value[$x]; 
    $model->someothervalue = ''.$someothervalue[$x]; 
    $model->save(); 
}; 
+2

++ – srph