Сортировка моделей после присоединения к реляционной таблице, когда обе таблицы имеют одинаковые имена столбцов

Сортировка моделей после присоединения к реляционной таблице, когда обе таблицы имеют одинаковые имена столбцов

16.11.2019 01:48:53 Просмотров 42 Источник

Я создаю приложение на Laravel, где у меня есть ProjectLatestStatus, у меня есть таблица, в которой есть средства сортировки. Поэтому я могу сортировать по имени, его последнему статусу, последнему обновлению и т. д. Так что архитектура этого есть:

LatestStatus

Я хочу сортировать проекты, присоединяясь 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 и сортируя в соответствии с текущим статусом проекта. Для этого я попробовал что-то вроде этого:

latest_status

Все работает нормально, но как только я нажимаю на статус сортировки это дает мне ошибку:

SQLSTATE[23000]: нарушение ограничения целостности: 1052 столбец "статус" в предложении where неоднозначен (SQL: select count(*) as aggregate from 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(); inner join projectson 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(); .projects = project_status.status внутреннее соединение project_id на project_status.project_latest_status = project_id.project_status, где id= сохранено и status.projectsравно null)"

Помоги мне в этом. Спасибо

У вопроса есть решение - Посмотреть?

Ответы - Сортировка моделей после присоединения к реляционной таблице, когда обе таблицы имеют одинаковые имена столбцов / Sorting models after joining the relational table when both tables have same column names

Является ответом!
Mahmoud Gad

16.11.2019 01:53:37

изменения от

where('status', 'saved')

к

where('projects.status', 'saved')

или где бы вы ни использовали statusс другой присоединенной таблицей другое же поле поэтому вам нужно указать таблицу в которой вы хотите фильтровать по status

Закрыть X