[英]Sorting models after joining the relational table when both tables have same column names
我正在Laravel
上构建一个应用程序,其中我有Project
和LatestStatus
model,我有一张有分类设施的桌子。 所以我可以按名称、最新状态、最后更新等排序。所以它的架构是:
projects
id
name -> string
state -> string
region -> string
status -> enum ('saved', 'draft')
created_at -> timestamp
updated_at -> timestamp
project_latest_status
id
project_id -> integer // (project id foreign key)
status -> string // (current status of project)
我想通过加入latest_status
表对项目进行排序,并根据项目的当前状态进行排序。 为此,我尝试了这样的事情:
Project::where('status', 'saved')
->when( $request->name , function( $q) use( $request ) {
$q->where('name', 'like', '%' . $request->name .'%');
})
->when($request->status, function ($q) use($request) {
$q->whereHas('latestStatus', function ($q) use($request){
$q->whereHas('status', function ($q) use($request) {
$q->whereIn('name', collect($request->status)->pluck('name') );
});
});
})
->when($request->sort_by_column, function ($q) use($request) {
$q->when($request->sort_by_column['column'] == 'name' || $request->sort_by_column['column'] == 'website', function ($q) use($request) {
$q->orderBy($request->sort_by_column['column'], $request->sort_by_column['order'] );
})
->when($request->sort_by_column['column'] == 'added_date' , function ($q) use ($request) {
$q->orderBy('created_at', $request->sort_by_column['order']);
})
->when($request->sort_by_column['column'] == 'status', function ($q) use ($request) {
$q->join('project_latest_status', 'projects.id', '=', 'project_latest_status.project_id')
->join('project_status', 'project_latest_status.status', '=', 'project_status.id')
->select('projects.*', 'project_status.name as status_name')
->orderBy('status_name', $request->sort_by_column['order']);
})
})->get();
一切正常,但只要我点击状态排序,它就会给我一个错误:
SQLSTATE[23000]:完整性约束违规:1052 where 子句中的列“状态”不明确(SQL:select 计数(*)作为
projects
内部连接project_latest_status
在projects
上的聚合id
=project_latest_status
project_id
内部连接project_status
在project_latest_status
上。status
=project_status
id
wherestatus
= saved andprojects
deleted_at
is null)"
帮我解决这个问题。 谢谢
改变从哪里
where('status', 'saved')
至
where('projects.status', 'saved')
或者您将status
与另一个连接表一起使用另一个相同的字段,因此您需要指定要按status
过滤的表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.