Php 在MySQL和Laravel中使用条件连接嵌套表

Php 在MySQL和Laravel中使用条件连接嵌套表,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在Laravel 7上构建一个应用程序,其中我有以下模型: 公司(表名公司) 合同(表名合同授予) 项目(表名项目) 类别 id name 1 Residential 2 Commercial 类别项目表 id categories_id project_id 1 2 1 目前,我正在获取公司和项目详细信息,其中在公司中使用自己的过滤器/参数获取项目,在项目中使用自己的过滤器/参数获取项目,我能够加入项目表

我正在
Laravel 7
上构建一个应用程序,其中我有以下模型:

公司(表名
公司

合同(表名
合同授予

项目(表名
项目

类别

id    name
1     Residential
2     Commercial
类别项目表

id   categories_id    project_id
1        2                   1
目前,我正在获取公司和项目详细信息,其中在公司中使用自己的过滤器/参数获取项目,在项目中使用自己的过滤器/参数获取项目,我能够加入项目表并根据条件获取结果,但在应用类别过滤器时,我无法获取数据。我不确定我的操作是否正确,我的代码如下:

Company::leftjoin('合同授予'),函数($join){
$join->on('companys.id','=','contract\u awards.dewarded\u by');
})
->leftjoin('projects',function($q){
$q->on('contract\u awards.project\u id','=','projects.id'))
->当(请求('state')、函数($q){
$q->其中('state',collect(request('state')->pull('id'));
})
->当(请求('region')、函数($q){
$q->where('region',collect('request('region'))->pull('id');
})
->当(请求('categories')、函数($q){
$q->leftjoin('categories\u projects\u table',函数($q){
$q->on('projects.id','=','categories\u projects\u table.project\u id');
})
//当前使用静态id的检查稍后将更改为collect(请求('categories')->Pull('id'))
->选择('categories\u projects\u table.categories\u id as project\u categories\u id')
->其中(‘项目类别识别号’,[1]);
});
})
->选择('companys.*','projects.name作为项目名称','projects.area作为项目区域')
->分页(15);
我的意思是我想用它的类别关系过滤项目,上面的代码给了我错误:

未找到列:1054“on子句”中的未知列“project\u categories\u id”(SQL:选择count(*)作为来自
公司的聚合


任何更好的执行方法都是最受欢迎的,提前感谢。

当您使用where查询时,您需要使用实际的列名,而不是它的别名。(
categories\u id
而不是
project\u categories\u id
)当您使用where查询时,您需要使用实际的列名,而不是它的别名。(
categories\u id
而不是
project\u categories\u id
id        name                  state          region
1      Sample Project 1       XYZ State      ABC Region
id    name
1     Residential
2     Commercial
id   categories_id    project_id
1        2                   1