Как узнать, создана ли запись или обновлена ​​в функции updateOrCreate? - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть простая форма сообщения.Записи сохраняются в базе данных с функцией updateOrCreate.

У меня есть следующие записи для хранения,

  1. user_id
  2. product_id
  3. обзор
  4. рейтинг

После отправки формы, user_id и product_id используются для проверки существования записи.Если существует, запись будет обновлена, в противном случае новая запись будет создана с помощью функции.

public function updateOrCreate($input)
{
    return $this->model->updateOrCreate(['product_id'=> $input['product_id'],'user_id'=>$input['user_id']],['rating'=>$input['rating'],'review'=>$input['review']]);
}

Существует ли какой-либо встроенный метод для поиска новой созданной записи или обновления существующей записи?

Любые предложенияценится.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

В моделях Eloquent есть публичное свойство $wasRecentlyCreated.Он устанавливается при выполнении вставки .И это будет только true после вставки для того же запроса;не для последовательных запросов.Если обновление было выполнено, оно будет false.

. Имейте в виду, что свойство также является true для точно такого же экземпляра модели.Если вы перезагрузите модель с Product::find($id), это будет false.Что произойдет, если вы позвоните refresh() на модели, к сожалению, мне неясно.

0 голосов
/ 16 декабря 2018

Вам необходимо определить, были ли изменены модель или данный атрибут (ы).И метод wasChanged () поможет определить, обновлена ​​модель или нет.

$model = $this->model->updateOrCreate(['product_id'=> $input['product_id'],'user_id'=>$input['user_id']],['rating'=>$input['rating'],'review'=>$input['review']]);

// It will return true if the record have been modified
$wasChanged = $model->wasChanged();
if ( $wasChanged ) {
    // updated
}
else {
   // created
}

Надеюсь, это поможет вам.

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