Создать или обновить строки Laravel - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь обновить или создать таблицу с данными из запроса, при обновлении это работает, но при создании я могу сделать только для 1. Итак, если у меня есть 4 новых элемента, только 1 сохраняется, не знаю почему, и ошибок нет. Если я дам запрос, у меня будут все значения.

$answers = new LkpAnswer;

    foreach ($request->items as $key => $item) {
        if (isset($item['id'])) {
            $answers->where('id', $item['id'])->update($item);
        } else {
            $answers->fill($item)->save();
        }
    }

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Пожалуйста, введите следующий код:

foreach ($request->items as $key => $item) {
    if (isset($item['id'])) {
        LkpAnswer::where('id', $item['id'])->update($item);
    } else {
        $answers = new LkpAnswer; //new up an empty model(object) then fill it with your array of data, and finally save it.
        $answers->fill($item)->save();
    }
}
0 голосов
/ 19 марта 2020

Если вы хотите использовать UpdateOrCreate, то упростите этот запрос, используя в foreach l oop

foreach ($request->items as $key => $item) {

    LkpAnswer::updateOrCreate($item['id'],$item);

}

Модель

protected $fillable = ['field_name'];

Для справки Прочитайте это Документация

0 голосов
/ 19 марта 2020

Это должно быть достигнуто аккуратно с помощью встроенных методов:

foreach ($request->items as $item) {
    LkpAnswer::updateOrCreate($item['id'],$item);
}

Убедитесь, что соответствующие поля заполнены - см. Защита массового назначения .

...