Получение уникальных результатов от отношений - PullRequest
0 голосов
/ 27 мая 2020

Я разрабатываю страницу, на которой хочу отображать уникальные результаты отношения и весь результат. Результат entr ie я получаю следующим образом:

$media = Media::whereHas('block', function ($query) {
            $query->where('identifier', "page");
        })->with(["texts" => function ($query) use ($language) {
            $query->where("language_id", $language->id);
        }])->get();

В отношении текстов это поле заголовка, из которого я хочу получить только уникальные результаты.

Я пытался сделать другой запрос, но он не сработал

$media = Media::whereHas('block', function ($query) use ($blockId) {
            $query->where('identifier', "page");
        })->with(["texts" => function ($query) use ($language) {
            $query->where("language_id", $language->id);
        }])->distinct("texts.title")->get();

Как я могу этого добиться? и могу ли я сделать это с тем же результатом (а не с другим запросом)

изменить: мне нужен список уникальных заголовков

1 Ответ

0 голосов
/ 27 мая 2020

Запросы на отношения выполняются отдельно от основного запроса, любые logi c при извлечении отношений должны go в функции with:

$media = Media::whereHas('block', function ($query) use ($blockId) {
            $query->where('identifier', $blockId);
        })->with(["mediaTexts" => function ($query) use ($language) {
            $query->where("language_id", $language->id)
                  ->select('title')
                  ->distinct();
        }])->get();

Здесь каждый полученный объект Media должен иметь различные заголовки в отношении mediaTexts. Если вам нужны все данные о взаимоотношениях, все будет сложнее.

Чтобы получить различные заголовки медиатекстов среди всех Media объектов после их извлечения, вы можете:

$media = Media::whereHas('block', function ($query) use ($blockId) {
            $query->where('identifier', $blockId);
        })->with("mediaTexts")->get();
$titles = $media->pluck('mediaTexts.title')->unique();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...