ICStudio
Услуги
ПортфолиоКейсы
Инструменты
ДемоБлог
ICStudio
ГлавнаяIC Studio Morning PostФильтр belongsToMany в админке October
Назад к Morning Post

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

Если вы делаете полноценные решения на базе OctoberCMS, то без фильтров сущностей в административной панели Вам вряд ли обойтись. Даже если вы их не задумывали на этапе создания, где-то перед самым запуском проекта, когда клиент внесет свои многочисленные данные в проект, вопрос управления этими данными станет достаточно остро.

Опубликовано: 11/15/2021

Якщо ви робите повноцінні рішення на базі OctoberCMS, то без фільтрів сутностей адміністративної панелі вам навряд чи обійтися. Навіть якщо ви їх не замислювали на етапі створення, десь перед запуском проекту, коли клієнт внесе свої численні дані в проект, питання управління цими даними стане досить гостро.

Документація October щодо створення фільтрів має умовний, поверхневий характер. Особливо це стосується зв'язків belongsToMany, коли крім самих моделей присутня pivot-таблиця. Давайте напишемо такий код самі.

Всі нестандартні вибірки з моделі в Laravel реалізуються через scope. Наприклад:

php
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 додаємо:

yaml
category:
  label: Категорія
  modelClass: Path\To\Your\Model
  scope: FilterCategories
  nameFrom: name

З параметра scope стає зрозуміло, яку назву методу нам потрібно створити в моделі: scopeFilterCategories(). Давайте створимо його

php
public function scopeFilterCategories($query, $categories)
    {
        return $query->whereHas('categories', function($q) use ($categories) {
            $q->withoutGlobalScope(NestedTreeScope::class)->whereIn('id', $categories);
        });
    }

Вуаля :)

Поделиться:

Хотите работать с нами?

Обсудим ваш проект и найдём лучшее решение

Связаться с нами
ICStudio

Профессиональная веб-разработка и IT-решения для бизнеса

Быстрые ссылки

  • Главная
  • Портфолио
  • Кейсы
  • Блог
  • Команда

Resources

  • Tools
  • AI Chatbots
  • Demo
  • Docs
  • Pilot Program
  • Hire Us

Услуги

  • Web Development
  • E-commerce
  • CRM
  • Support

Контакты

  • hello@icstudio.online
  • +38 099 123 45 67
  • Kyiv, Ukraine

© 2026 IC Studio. Все права защищены.

Политика конфиденциальностиУсловия использованияService Terms