dvizh/yii2-relations

Модуль позволяет привязывать любые модели к любым моделям (пример - похожие товары и т.д.)

Installs: 1 642

Dependents: 2

Suggesters: 0

Security: 0

Stars: 0

Watchers: 3

Forks: 0

Open Issues: 0

Type:yii2-extension

dev-master 2018-03-09 11:59 UTC

This package is not auto-updated.

Last update: 2024-05-07 15:26:09 UTC


README

Модуль дает возможность быстро добавить возможность связывать модели между собой. Пример использования: привязка похожих продуктов.

Установка

Выполнить команду

php composer require dvizh/yii2-relations "@dev"

Или добавить в composer.json

"dvizh/yii2-relations": "@dev",

И выполнить

php composer update

Подключение и настройка

В конфигурационный файл приложения добавить модуль relations

    'modules' => [
        //..
        'relations' => [
            'class' => 'dvizh\relations\Module',
            'fields' => ['code'],
        ],
        //..
    ]

*fields - массив доп. полей (по умолчанию в окне выбора показываются только id и название)

Использование

Связи хранятся в отдельном поле (TEXT) в виде сериализованного массива, поле нужно создать и добавить в модели. К модели, которая имплементирует \dvizh\relations\interfaces\Torelate и наследует AR, подключить поведение:

    function behaviors()
    {
        return [
            'relations' => [
                'class' => 'dvizh\relations\behaviors\AttachRelations',
                'relatedModel' => 'common\models\Product',
                'inAttribute' => 'relations',
            ],
        ];
    }

    public function getName()
    {
        return $this->name;
    }
    
    public function getId()
    {
        return $this->id;
    }
  • inAttribute - название поля модели, где будут храниться связи
  • relatedModel - модель, элементы которой нужно привязывать

Теперь привязанные модели будет возвращаеть метод $model->getRelations()->all().

Виджеты

Выбор подключаемых моделей осуществляется через виджет:

<?=\dvizh\relations\widgets\Constructor::widget(['model' => $model]);?>

Его необходимо вызвать внутри формы редактирования вашей модели.