ICStudio
Послуги
ПортфоліоКейси
Інструменти
ДемоБлог
ICStudio
ГоловнаIC Studio Morning PostФільтр belongs-to-many в адмінці October
Назад до Morning Post

Фільтр belongs-to-many в адмінці 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