Допустим, у меня есть следующая таблица ...
+----+---------------------+---------+---------------------+
| id | slug | version | created_at |
+----+---------------------+---------+---------------------+
| 1 | url-friendly-string | 1.0.0 | 2020-01-19 01:00:00 |
+----+---------------------+---------+---------------------+
| 2 | url-friendly-string | 1.0.0 | 2020-01-19 02:00:00 |
+----+---------------------+---------+---------------------+
| 3 | url-friendly-string | 1.0.1 | 2020-01-20 00:00:00 |
+----+---------------------+---------+---------------------+
| 4 | another | 0.0.1 | 2020-01-20 00:30:00 |
+----+---------------------+---------+---------------------+
| 5 | another | 0.0.2 | 2020-01-20 01:00:00 |
+----+---------------------+---------+---------------------+
Может быть несколько записей с одинаковыми slug
и version
, и я хочу получить самую последнюю, самую высокую версию каждого элемента, сгруппированную на slug
. Например, конечный результат будет выглядеть примерно так ...
$collection = Array(
Object(
'slug' => 'another',
'version' => '0.0.2',
'created_at' => '2020-01-20 01:00:00'
),
Object(
'slug' => 'url-friendly-string',
'version' => '1.0.1',
'created_at' => '2020-01-20 00:00:00'
)
)
Я пробовал следующее ...
1.
$collection = auth()->user()
->items()
->orderBy('created_at', 'desc')
->orderBy('version', 'desc')
->groupBy('slug', 'version')
->get();
Который выдает:
Синтаксическая ошибка или нарушение прав доступа: 1055 Выражение # 1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец
Хороший Ответ об этой ошибке можно найти здесь: { ссылка }
2.
$collection = auth()->user()
->items()
->orderBy('created_at', 'desc')
->orderBy('version', 'desc')
->get()
->groupBy('slug', 'version')
->map(function($group) {
return $group->first();
});
Какие работы, но могут привести к неправильному заказу .
Как мне добраться туда, где я должен быть?
Это новый проект, поэтому уничтожение таблиц и т. Д. c не является проблемой.