Если вы делаете полноценные решения на базе OctoberCMS, то без фильтров сущностей в административной панели Вам вряд ли обойтись. Даже если вы их не задумывали на этапе создания, где-то перед самым запуском проекта, когда клиент внесет свои многочисленные данные в проект, вопрос управления этими данными станет достаточно остро.
Документация October касательно создания фильтров носит условный, поверхностный характер. Особенно это касается связей belongsToMany, когда помимо самих моделей присутствует pivot-таблица. Давайте напишем такой код сами.
Все нестандартные выборки из Модели в Laravel реализуются через scope. Например:
public function scopeHomePageRecommend($query)
{
$current_cite_sity = config('app.current_site_city');
return \Cache::remember('home_page_recommend', 3600, function() use ($query, $current_cite_sity) {
return $query->where('city_id', $current_cite_sity)->where('is_recommend', 1)->with('image', 'gallery')->take(3)->get()->toArray();
});
}
Тогда получить результат выполнения этого запроса можно просто через ModelName::HomePageRecommend()
Аналогичным способом можно добиться работы фильтра в своих плагинах для связи типа belongsToMany. В config_filter.yaml добаляем:
category:
label: Категория
modelClass: Path\To\Your\Model
scope: FilterCategories
nameFrom: name
Из параметра scope
становится понятно какое название метода нам нужно создать в модели: scopeFilterCategories(). Давайте создадим его
public function scopeFilterCategories($query, $categories)
{
return $query->whereHas('categories', function($q) use ($categories) {
$q->withoutGlobalScope(NestedTreeScope::class)->whereIn('id', $categories);
});
}