laravel - 从关系中检索独特的结果
问题描述
我正在开发一个页面,我想在其中显示来自关系和整个结果的独特结果。我检索它的条目结果如下:
$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();
我怎样才能做到这一点?我可以从相同的结果中做到吗(不是另一个查询)
编辑:我想要的是一个独特的标题列表
解决方案
关系查询与主查询分开执行,检索关系的任何逻辑都必须放在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();
推荐阅读
- c# - 如何删除字符串中的转义字符
- google-cloud-datastore - 如何将各种(表)导出到本地系统?
- javascript - 在构造函数中初始化状态时出现意外标记
- node.js - 如何将文件从 angular7 上传到 Node.js 服务器
- c# - ConnectionString 与 DataDirectory (c#, sqlserver)
- r - 如何使用 data.table 选择一行及其下一行和上一行
- c# - Visual Studio 2019 for Mac:还原或添加 Nuget 包时出错
- python - tkinter:当它通过 for 循环时不改变标签值,它只显示结束值
- javascript - 从数组中返回最新日期
- flutter - Flutter TextField 只输入十进制数字