Easy linking and sync relationships many-to-many.
Run the Composer command to install the latest stable version:
composer require frostealth/yii2-relation-behavior @stable
SyncRelationBehaviorEasyRelationBehavior
Attach the behavior to your model:
public function behaviors()
{
return [
SyncRelationBehavior::className(),
];
}Use the sync method to construct many-to-many associations.
The sync method accepts an array of IDs.
$model->sync('categories', [2, 5, 9]);The EasyRelationBehavior extends the SyncRelationBehavior.
Attach the behavior to your model:
public function behaviors()
{
return [
[
'class' => EasyRelationBehavior::className(),
'relations' => ['categories'],
'suffix' => 'ids', // by default
],
];
}
public function rules()
{
return [
['categoriesIds', 'each', 'rule' => ['integer', 'integerOnly' => true]],
];
}Just add your $suffix to the relation name and you will get associated ids:
$categoriesIds = $model->categoriesIds; // [1, 3, 4]
// linking
$categoriesIds = [2, 3, 5];
$model->categoriesIds = $categoriesIds;
$model->save();Add control to view for managing related list.
Without extensions it can be done with multiple select:
<?php $categories = ArrayHelper::map(Category::find()->all(), 'id', 'name') ?>
<?= $form->field($model, 'categoriesIds')->dropDownList($categories, ['multiple' => true]) ?>The MIT License (MIT). See LICENSE.md for more information.