Laravel UpdateOrCreate - PullRequest
       5

Laravel UpdateOrCreate

0 голосов
/ 06 июня 2018

Я пытаюсь, если есть записи, просто обновить, а если нет записей, просто создать.Проблема:

Случай уже есть записи: создает записи, когда уже есть записи в базе данных.

public function store(Request $request)
    {
        $time = $request->input('time');
        foreach ($request->input('number') as $key => $value) {
            Choice::UpdateOrCreate([
                'user_id' => Auth::id(),
                'time'  => $time,
                'topic_id' => $key,
                'question_number' => $value,
            ]);
        }
    }

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Согласно Rest Update в crud UpdateOrCreate создает запись, если не находит подходящей записи.Итак, ваш формат Choice :: UpdateOrCreate должен быть таким:

Choice::updateOrCreate(['user_id' => Auth::id(),
                    'time'  => $time,], [
                    'topic_id' => $key,
                    'question_number' => $value,
                ]) 

, где ['user_id' => Auth :: id (), 'time' => $ time,] - проверка на существованиезаписи.

0 голосов
/ 06 июня 2018

используйте таким образом:

    $matchThese=array('user_id' => Auth::id())

    Choice::updateOrCreate($matchThese,['topic_id'=>$key,'question_number' => $value,'time' => $time]);
0 голосов
/ 06 июня 2018

Вы должны передать два параметра UpdateOrCreate, первый - attributes поиска записей, второй - values в документе метода, который у нас есть:

Создатьили обновите запись, соответствующую атрибутам, и заполните ее значениями.

Поэтому, если вы ищете запись только с user_id, вы должны сделать это следующим образом:

public function store(Request $request)
{
    $time = $request->input('time');
    foreach ($request->input('number') as $key => $value) {
        Choice::UpdateOrCreate([
            'user_id' => Auth::id()
         ],
         [
            'time'  => $time,
            'topic_id' => $key,
            'question_number' => $value,
        ]);
    }
}
0 голосов
/ 06 июня 2018

Попробуйте заменить код в цикле следующим образом:

...
Choice::UpdateOrCreate(
    ['user_id' => Auth::id(), 'time' => $time],
    ['topic_id' => $key, 'question_number' => $value]
);
...

Это будет искать запись пользователя в определенное время и создавать ее, если ее нет, но если она есть, обновит ее topic_idи номер вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...