У меня 2 модели, Сервис и Категория . Они связаны с отношением «многие ко многим» следующим образом:
Service.php
public function categories()
{
return $this->belongsToMany('App\Category')->withTimestamps();
}
Category.php
public function services()
{
return $this->belongsToMany('App\Service')->withTimestamps();
}
И, конечно, они объединены сводной таблицей:
category_service
- category_id
- service_id
- created_at
- updated_at
Я бынравится использовать локальную область видимости для фильтрации результатов обслуживания на основе идентификаторов категорий. Я сделал следующее:
Service.php
public function scopeFilter($query, $category_ids)
{
$services = Service::whereHas('categories', function (Builder $query) use ($category_ids) {
$query->whereIn('category_id', $category_ids)->get();
});
return $services;
}
Но я получаю ошибку Column not found
, а именно:
Column not found: 1054 Unknown column 'services.id' in 'where clause' (SQL: select * from `categories` inner join `category_service` on `categories`.`id` = `category_service`.`category_id` where `services`.`id` = `category_service`.`service_id` and `category_id` in (1, 2))
1 и 2 - категорияИдентификаторы, которые я передаю.
Я написал функцию, основываясь на найденном ответе здесь и здесь .
Есть указатели?