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