我的控制器中有以下查询。
1
这正确地为我提供了所有项目,包括语言ID为1的子项目。
虽然
我想做两件事$items = Item::with(['subitems' => function($query) {
$subItems = $query->where('language_id', '=', 1)
->where('ref_id', 'is', 'distinct');
if($subItems->count() <= 0) {
$subItems = $query->where('ref_id', 'is', 'distinct');
}
}])->get();
,但如果不存在,请使用任何语言标识。例如,我知道这段代码不会起作用,但我要找的是:
feature_geometry =
{
'type': 'MultiPolygon',
'coordinates': [[[
[-120, 35],
[-120.001, 35],
[-120.001, 35.001],
[-120, 35.001],
[-120, 35]
]]]
}
这是可能的,还是对查询生成器来说有点过于复杂?即使这两个请求中的一个是可能的,那也很棒。
答案 0 :(得分:1)
试试这个:
$items = Item::with(['subitems' => function($query) {
$join = Subitem::select('ref_id', DB::raw('MIN(language_id) language_id'))
->groupBy('ref_id');
$sql = '(' . $join->toSql() . ') subitems_distinct';
$query->join(DB::raw($sql), function($join) {
$join->on('subitems.ref_id', 'subitems_distinct.ref_id')
->on('subitems.language_id', 'subitems_distinct.language_id');
});
}])->get();
我们可以使用您首选的language_id
是最低值并选择最小值的事实。