php - 在laravel中根据父级的父级数据添加条件
问题描述
我在将查询转换为 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。
这是它的架构
- 表格语言:id、代码
- 表区域:id、code、language_id
- 表类别:id、status、region_id
- 表类别语言区域:id、title、category_id、language_id
这是我尝试过的
$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
等于 selected region.language_id
。
解决方案
您能否根据给定的代码使用查询生成器尝试此解决方案:
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');
});
推荐阅读
- pandas - 在数据框底部添加一行
- android - MVVM Room -> DAO -> Repository -> ViewModel -> Activity 使用列表和后台线程
- flutter - 在 if 之后使用 if.clause 中使用的值/变量
- c# - unity2D 中的光线投射
- c++ - 使用 exp/expl 函数在 C++ 中处理小数
- python - 如何从 MongoDB 中的模式中获取值
- c - 为什么信号量即使收到 post 操作也会锁定?
- python - Python字符串存储单引号问题
- javascript - 如何在 mongodb 数据库中记录 AdonisJS 错误
- list - 按编号和名称对列表进行排序