В моем проекте Laravel есть 2 модели: «Пользователь» и «Поле», они связаны отношениями «Многие ко многим».
Модель поля имеет только 2 столбца: слаг, данные и временные метки.
Я хочу получить пользователей с некоторыми полями по слагу, но не по всем, а только по самым последним для каждого слага из массива.
Вот что я пытаюсь сделать:
Этот пример кода извлекает все поля, относящиеся к User id:1
и имеющие slug
из массива $ slugs.
$slugs = ['first_name','last_name'];
User::with(['fields' => function($query) {
$query->whereIn('slug', $slugs);
}])->find(1);
Но у каждого пользователя может быть много полей с одинаковым слагом - давайте назовем это поле версиями.
Таким образом, пользователь 1 на самом деле имеет поле
[slug => first_name, data => John]
, а также [slug => first_name, data => Mary]
. Я хочу получить только последнюю версию поля для каждого слага из массива $slugs
.
Это неверный пример, но он возвращает только последнюю версию для первого слагаемого поля, найденного в БД.
$slugs = ['first_name','last_name'];
User::with(['fields' => function($query) {
$query->whereIn('slug', $slugs)->latest()->first();
}])->find(1);
Есть ли способ сделать это с помощью построителя запросов?