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
SyncRelationBehavior
EasyRelationBehavior
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.