我有一张桌子,我正在尝试使用save()
方法来更新/创建线条。问题是它总是创造新的线条。以下代码每次运行时都会给我大约12行。在插入之前,它们没有唯一的id
,但name
和DateTimeCode
的组合是唯一的。有没有办法使用这两个来让laravel将它们识别为exist()
?我应该考虑将if exist
与create
和update
一起使用吗?
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();
};
答案 0 :(得分: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();
};
答案 1 :(得分: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();
};