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

Фильтр 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);
        });
    }

Вуаля :)

Поделиться:

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

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

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

Похожие статьи

10/16/2024

Почему October CMS — идеальный выбор для креативных бизнесов и бизнесов с нестандартными бизнес-процессами

10/14/2024

Безопасность онлайн-платежей: Как обеспечить защиту данных клиентов в вашем проекте на Laravel?

5/17/2023

Программное обеспечение для ломбардов: преимущества, функции, требования

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