группа laravel за получением последней записи из таблицы - PullRequest
0 голосов
/ 06 ноября 2019

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

Вот красноречивый запрос, который я использую.

Product::whereNotNull('user_id')
         ->orderBy('id','desc')
         ->groupBy('user_id')
         ->get();

вот моя таблица

Id   Name   user_id
-------------------------
1    A       1
2    b       1
3    c       2
4    d       2
5    e       3
6    f       3

результат, который мой запрос дает мне

Id   Name   user_id
-------------------------
1    A       1
3    c       2
5    e       3

результат, который я хочу

Id   Name   user_id
-------------------------
2    b       1
4    d       2
6    f       3

Ответы [ 3 ]

2 голосов
/ 06 ноября 2019
Product::whereRaw('id IN (select MAX(id) FROM products GROUP BY user_id)')
         ->whereNotNull('user_id')
         ->orderBy('id','desc')
         ->get();

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

GroupBy происходит раньше OrderBy, поэтому вы должны получить свою последнюю запись, прежде чем сделать заказ

1 голос
/ 06 ноября 2019

Попробуйте:

$subquery = Product::orderBy('id','DESC');

$products = DB::table(DB::raw("({$subquery->toSql()}) as subquery"))
   ->whereNotNull('user_id')
   ->groupBy('user_id')
   ->get();

2-й способ: используйте метод unique() в коллекции (метод unique возвращает все уникальные модели в коллекции):

$products = Product::whereNotNull('user_id')
             ->orderBy('id','desc')
             ->get()
             ->unique('user_id');
0 голосов
/ 06 ноября 2019

Извлечение Документы Laravel

самые последние / самые старые
Методы latest и oldest позволяют легко упорядочить результаты по дате. По умолчанию результат будет упорядочен по столбцу created_at. Или вы можете передать имя столбца, по которому вы хотите отсортировать:

$product = Product::latest()->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...