Eloquent / Laravel: как получить последний идентификатор вставки/обновления/экземпляр updateOrCreate()?

Название в основном говорит само за себя. В Eloquent есть метод под названием

updateOrCreate()

задокументировано здесь: https://laravel.com/docs/5.5/eloquent#other-creation-methods

В некоторых случаях это действительно полезно. Однако после выполнения updateOrCreate() мне нужен либо обновленный/созданный объект, либо его первичный ключ, либо его идентификатор.

Конечно, я мог бы сделать MyModel::where(...)->first() и снова передать все эти данные, но это неуклюже и может оказаться дорогостоящим запросом.

Однако updateOrCreate() возвращает только true или false.

Есть идеи?


person Blackbam    schedule 25.10.2017    source источник
comment
Возможный дубликат Laravel, получить идентификатор последней вставки с помощью Eloquent   -  person chiliNUT    schedule 25.10.2017


Ответы (2)


Метод вернет идентификатор созданного или обновленного объекта, поэтому просто сделайте следующее:

$object = Model::updateOrCreate(['name' => 'John'], ['age' => 25]);

$id = $object->id;
person Alexey Mezenin    schedule 25.10.2017
comment
На самом деле вы правы, похоже, я имел в виду пользовательскую функцию, за которую не спасибо. - person Blackbam; 25.10.2017
comment
Кажется, что метод всегда возвращает объект? - person Adam; 24.11.2017

Запрос на последний

$lastRecord = MyModel::last();

Or

$lastRecord = MyModel::orderBy('id', 'DESC')->first();
person Lloople    schedule 25.10.2017
comment
Это не всегда даст вам правильную запись, скажем, у вас есть таблица из 40 строк, метод updateOrCreate обновляет идентификатор 20, ни один из вышеперечисленных не вернет обновленный. Вышеприведенное будет работать только в том случае, если будет создана новая запись. - person JLeggatt; 25.10.2017
comment
Да, вы правы, вам придется использовать updated_at, если вы используете метки времени. Иначе никак (если только не сохранить id, как сказал Алексей. Я думал, что вопрос был о разных запросах. - person Lloople; 02.02.2018