Laravel Eloquent ORM保存:更新与创建

时间:2013-10-30 14:22:26

标签: laravel save eloquent

我有一张桌子,我正在尝试使用save()方法来更新/创建线条。问题是它总是创造新的线条。以下代码每次运行时都会给我大约12行。在插入之前,它们没有唯一的id,但nameDateTimeCode的组合是唯一的。有没有办法使用这两个来让laravel将它们识别为exist()?我应该考虑将if existcreateupdate一起使用吗?

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();
};

2 个答案:

答案 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();
};