Выберите последнюю строку в таблице

Я хотел бы получить последний файл, вставленный в мою таблицу. Я знаю, что метод first() существует и предоставляет вам первый файл в таблице, но я не знаю, как получить последнюю вставку.

Ответ 1

Вам нужно будет упорядочить по тому же полю, которое вы сейчас упорядочиваете, но по убыванию. Например, если у вас есть timestamp, когда загрузка была выполнена, называемая upload_time, вы бы сделали что-то вроде этого;

Для Pre-Laravel 4

return DB::table('files')->order_by('upload_time', 'desc')->first();

Для Laravel 4 и далее

return DB::table('files')->orderBy('upload_time', 'desc')->first();

Для Laravel 5.7 и выше

return DB::table('files')->latest('upload_time')->first();

Это упорядочит строки в таблице файлов по времени загрузки, по убыванию и возьмет первую. Это будет последний загруженный файл.

Ответ 2

Используйте последнюю область, предоставленную Ларавелем из коробки.

Model::latest()->first();

Таким образом, вы не извлекаете все записи. Более удобный ярлык для orderBy.

Ответ 3

Вы никогда не упоминали, используете ли вы Eloquent, Laravel по умолчанию ORM или нет. В случае, если хотите, скажите, что вы хотите получить последнюю запись таблицы пользователя, созданной_at, вы, вероятно, могли бы сделать следующее:

User::orderBy('created_at', 'desc')->first();

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

Это вернет вам экземпляр объекта User, а не коллекцию. Разумеется, чтобы использовать эту альтернативу, у вас должна быть модель User, расширяющая класс Eloquent. Это может показаться немного запутанным, но очень легко начать работу, и ORM может быть действительно полезной.

Для получения дополнительной информации ознакомьтесь с официальной документацией , которая довольно богата и хорошо детализирована.

Ответ 4

Чтобы получить последние детали записи

  1. Model ::all()->last(); или же
  2. Model ::orderBy('id', 'desc')->first();

Чтобы получить последний идентификатор записи

  1. Model::all()->last()->id; или же
  2. Model ::orderBy('id', 'desc')->first()->id;

Ответ 5

В коллекциях Laravel есть метод last

Model::all() -> last(); // last element 
Model::all() -> last() -> pluck('name'); // extract value from name field. 

Это лучший способ сделать это.

Ответ 6

Попробуй это:

Model::latest()->get();

Ответ 7

Чтобы получить последние данные записи, используйте следующий код:

Model::where('field', 'value')->get()->last()

Ответ 8

Если вы ищете фактическую строку, которую вы только что вставили с помощью Laravel 3 и 4, когда вы выполняете действие save или create на новой модели, например:

$user->save();

-или -

$user = User::create(array('email' => '[email protected]'));

то экземпляр вставленной модели будет возвращен и может использоваться для дальнейших действий, таких как перенаправление на страницу профиля только что созданного пользователя.

Поиск последних вставленных записей в системе с низким объемом будет работать почти все время, но если вам когда-либо понадобится вставлять вставку, вы можете обратиться за поиском неверной записи. Это действительно может стать проблемой в транзакционной системе, где необходимо обновить несколько таблиц.

Ответ 9

Как-то все вышеизложенное, похоже, не работает для меня в laravel 5.3, поэтому я решил свою проблему, используя:

Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();

Надеюсь, я смогу выручить кого-то.

Ответ 10

Если в таблице есть поле даты, это (User::orderBy('created_at', 'desc')->first();), я думаю, лучшее решение. Но поля даты нет, Model ::orderBy('id', 'desc')->first()->id; это лучшее решение, я уверен.

Ответ 11

Используйте Model::where('user_id', $user_id)->latest()->get()->first(); он вернет только одну запись, если не найдет, он вернет null. Надеюсь, это поможет.

Ответ 12

Еще один интересный способ сделать это в Laravel 6.x (не уверен, но должен работать и для 5.x):

DB::table('your_table')->get()->last();

Вы также можете получить доступ к полям:

DB::table('your_table')->get()->last()->id;