2013-10-30 61 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