This behavior allows you to set relations in your code. Also, it saves many-to-many relations declared with via()
or viaTable()
Relations accepts int|int[]|ActiveRecord|ActiveRecord[]
.
php composer.phar require e96/yii2-relational-behavior:dev-master
In model:
class User extends ActiveRecord
{
public function behaviors()
{
return [
e96\behavior\RelationalBehavior::className(), // enable behavior
];
}
public function rules()
{
return [
['permissions', 'safe'], // allow set permissions with setAttributes()
];
}
// define many-to-many relation
public function getPermissions()
{
return $this->hasMany(Permission::className(), ['id' => 'permissionId'])
->viaTable('user-map-permission', ['userId' => 'id']);
}
}
In view:
$form->field($model, 'permissions')->dropDownList($permissions, ['multiple' => true])
$user->load(Yii::$app->request->post());
$user->save();
Other usages:
$user = User::findOne(1);
$user->permissions = 1;
// or
$user->permissions = [1,2];
// or
$user->permissions = Permission::findOne(1);
// or
$user->permissions = Permission::find()->all();
// or
$user->load(Yii::$app->request->post());
// or
$user->setAttributes(['permissions' => [1,2]]);
// then
$user->save();
Written with StackEdit.