首页 > 解决方案 > 从关系中检索独特的结果

问题描述

我正在开发一个页面,我想在其中显示来自关系和整个结果的独特结果。我检索它的条目结果如下:

$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();

我怎样才能做到这一点?我可以从相同的结果中做到吗(不是另一个查询)

编辑:我想要的是一个独特的标题列表

标签: laraveleloquent

解决方案


关系查询与主查询分开执行,检索关系的任何逻辑都必须放在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();

推荐阅读