首页 > 解决方案 > 在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。

这是它的架构

这是我尝试过的

$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

标签: phplaravellaravel-5eloquent

解决方案


您能否根据给定的代码使用查询生成器尝试此解决方案:

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');
});

推荐阅读