Как получить только последнюю / первую версию каждого условия массива, используя метод компоновщика запросов whereIn Laravel - PullRequest
0 голосов
/ 03 мая 2019

В моем проекте 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);

Есть ли способ сделать это с помощью построителя запросов?

...