OctoberCMS. Backend фильтрация по разным полям базы данных

Задача

Имеется таблица «Публикации» со следующей упрощённой структурой.

Schema::create('publications', function(Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->increments('id'); // Incrementing ID (primary key)
    $table->string('title', 350);
    $table->boolean('is_wos')->default(false);
    $table->boolean('is_scopus')->default(false);
    $table->boolean('is_risc')->default(false);
    $table->boolean('is_vak')->default(false);
    $table->timestamps();
});

Задача заключается в создании одного backend list фильтра, который будет выбирать записи исходя из разных полей базы данных, в данном случае is_wos, is_scopus, is_risc, is_vak.

Решение

Конфигурационный файл для фильтрации списка config_filter.yaml

# ===================================
# Filter Scope Definitions
# ===================================

scopes:
    indexation_type:
        label: Индексация
        type: group
        scope: ofIndexationTypes
        modelClass: <plugin_author>\<plugin_name>\Models\Publication
        options:
            wos: 'Wed of Science'
            scopus: Scopus
            risc: РИНЦ
            vak: ВАК

Scope в модели Publication.php

    /**
     * Фильтрация публикаций по типам индексации
     *
     * @param Builder $query
     * @param array $types wos | scopus | risc | vak
     * @return Builder
     */
    public function scopeOfIndexationTypes(Builder $query, array $types): Builder
    {
        foreach ($types as $type) {
            switch ($type) {
                case 'wos':
                    $query = $query->orWhere('is_wos', 1);
                    break;
                case 'scopus':
                    $query = $query->orWhere('is_scopus', 1);
                    break;
                case 'risc':
                    $query = $query->orWhere('is_risc', 1);
                    break;
                case 'vak':
                    $query = $query->orWhere('is_vak', 1);
                    break;
            }
        }
        return $query;
    }

Результат

В итоге получается то, что необходимо: один фильтр отправляющий запросы к разным полям. filter-by-different-fields.png

Другие записи из подборки «OctoberCMS. Backend.»

OctoberCMS plugin и Composer

https://github.com/octobercms/october/issues/1714

Пример можно посмотреть в гугл аналитеке от раинлаб

https://octobercms.com/forum/post/add-composer-packages-to-plugin-created-with-builder

Run the composer commands inside the plugin directory.

The load order will see the "core" composer is loaded first, then the plugins composers are loaded second. This means, a plugin cannot override a core composer package, it can only introduce new ones. This logic is handled by the ComposerManager class.

As a side note: When a plugin is published to the October website, the server will build the composer f...

Похожие записи

Как в OctoberCMS сделать простейшую переадресацию с одной страницы на другую?

Создаём страницу (Page), задаем URL и в секции код добавляем обработчик на хук жизненного цикла страницы. В данном случае это onStart, которая выполняется перед началом загрузки страницы.

function onStart()
{
    return Redirect::to('http://tyapk.ru');
}

OctoberCMS и HTTPS

Настройка конфигурационного файла cms.php для создания https ссылок.