Я создаю приложение на Laravel 7
, где у меня есть следующие модели:
Компания (имя таблицы companies
)
id name created_at
1 Sample company 1 2018-09-17 17:47:03
Контракты (имя таблицы contract_awards
)
id name company_id project_id created_at
1 Sample Project involved 1 1 2018-09-17 17:47:03
Проект (имя таблицы projects
)
id name state region
1 Sample Project 1 XYZ State ABC Region
Категории
id name
1 Residential
2 Commercial
Categories_projects_table
id categories_id project_id
1 2 1
В настоящее время я выбираю компании и детали проекта, где в компаниях выбираются с собственными фильтрами / параметры и проекты выбираются с его собственными фильтрами / параметрами, я могу присоединиться к таблице проектов и получить результат согласно условию, но при применении фильтра категорий я не могу получить данные. Я не уверен, правильно ли я это делаю или нет, мой код выглядит следующим образом:
Company::leftjoin('contract_awards', function ($join) {
$join->on('companies.id', '=', 'contract_awards.awarded_by');
})
->leftjoin('projects', function ($q) {
$q->on('contract_awards.project_id', '=', 'projects.id')
->when(request('state'), function ($q) {
$q->whereIn('state', collect(request('state')->pluck('id')));
})
->when(request('region'), function ($q) {
$q->whereIn('region', collect(request('region'))->pluck('id'));
})
->when(request('categories'), function ($q) {
$q->leftjoin('categories_projects_table', function($q) {
$q->on('projects.id', '=', 'categories_projects_table.project_id');
})
// currently checking with static IDs later will be changed to collect(request('categories'))->pluck('id')
->select('categories_projects_table.categories_id as project_categories_id')
->whereIn('project_categories_id', [1]);
});
})
->select('companies.*', 'projects.name as project_name', 'projects.area as project_area')
->paginate(15);
Я хочу сказать, что я хочу отфильтровать проекты с их отношением категории, приведенный выше код дает мне ошибку:
столбец не найден: 1054 Неизвестный столбец 'project_categories_id' в 'предложении' (SQL: выберите количество (*) как совокупность из companies
левое соединение contract_awards
на companies
. `id .........
Любой лучший подход к выполнению этого приветствуется, спасибо заранее.