Фильтр belongsToMany в админке October

Если вы делаете полноценные решения на базе 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);
});
}

Никогда не поздно изменить свой бизнес к лучшему

Приступить

Этот сайт использует файлы Cookie. Мы не персонализируем Вас, а лишь делаем серфинг на сайте более удобным. Вы можете ознакомиться с нашей Политикой приватности.