我在将查询转换为Laravel Eloquent时遇到问题。 这是查询:
SELECT cat.id,
reg.title AS region_title,
reg.region_code,
catlang.title,
catlang.description,
cat.status
FROM categories AS ca
JOIN regions As reg
ON cat.region_id = reg.id
JOIN category_language_region As catlang
ON cat.id = catlang.category_id
AND reg.language_id = catlang.language_id;
这在Postgres中有效,如您所见,我为加入category_language_region reg.language_id = catlang.language_id
添加了附加条件。我一直坚持将其转换为Laravel Eloquent Builder。
这是它的架构
这是我尝试过的
$results = Category::with([
'region' => function($query){
$query->select('title', 'id', 'region_code', 'language_id');
},
'categoryLanguages'
])->select(['categories.*'])
->whereIn('region_id', $region_ids);
但是它返回所有类别语言区域。我需要添加条件以仅选择等于所选category_language_region.language_id
的{{1}}。
答案 0 :(得分:0)
您能否根据给定的代码使用查询生成器尝试此解决方案:
DB::table('categories as cat')
->select([
'cat.id',
'reg.title as region_title',
'reg.region_code',
'catlang.title',
'catlang.description',
'cat.status'
])
->join('regions as reg', 'cat.region_id', '=', 'reg.id')
->join('category_language_region as catlang', function($join) {
$join->on('cat.id', '=', 'catlang.category_id');
$join->where('reg.language_id', '=', 'catlang.language_id');
});