Я хотел бы получить последний файл, вставленный в мою таблицу. Я знаю, что метод 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
Чтобы получить последние детали записи
-
Model ::all()->last();
или же -
Model ::orderBy('id', 'desc')->first();
Чтобы получить последний идентификатор записи
-
Model::all()->last()->id;
или же -
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;