В моделях каждой их них сделал связь через via table, примерно так:
Код: Выделить всё
class Order extends ActiveRecord
{
public function getOrderItems()
{
return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
}
public function getItems()
{
return $this->hasMany(Item::className(), ['id' => 'item_id'])
->via('orderItems');
}
}
Далее. Во вьюшке для создания/редактирования Order есть такое:
Код: Выделить всё
<?= $form->field($model, 'items')->dropDownList(ArrayHelper::map($items, 'id', 'name'), ['maxlength' => 255, 'multiple' => true, 'class'=>'form-control', 'size'=>10]) ?>
Но, когда я хочу в контроллере принимаю все эти данные, то хочу потом в модели Orders в методе beforeSave пробежаться по массиву $this->items, чтобы считать и записать отсюда все данные в промежуточную таблицу. Но не могу этого сделать, потому что Yii ругается, мол, свойство $this->items - только для чтения, и в него не получается записать никакие данные, когда я делаю в контроллере $model->load(Yii::$app->request->post());
Пока что вижу только один выход - это не load-ить эти данные в модель, а напрямую в контроллере принимать их и производить запись в промежуточную таблицу. Но это слишком некрасиво. Может, все же есть способ?
P.S. Свойство items в модели Orders в валидаторах добавил как safe.