Расскажу свой способ сохранения, а кто знает как правильнее, то прошу подсказать:
Есть главная модель Car:
id name status
1 bmw 10
Есть таблица CarDriver:
car_id title
1 max
2 tom
Связь между ними: у одной машины много водителей.
Есть форма(всю форму не копирую, просто одно поле с другой таблицы):
<?= $form->field($model, 'drivers_id')->widget(\common\widgets\Select2::className(), [
'allowClear' => true,
'multiple' => true,
'initValueText' => $model->carDriver,
]) ?>
Модель Car:
private $_drivers_id;
public function getCardriverr()
{
return $this->hasMany(CarDriver::className(), ['car_id' => 'id']);
}
public function getDrivers_id()
{
if(!is_array($this->_drivers_id)) {
$this->_drivers_id = ArrayHelper::map($this->carDriver, 'car_id', 'car_id');
}
return $this->_drivers_id;
}
public function setDrivers_id($val)
{
$this->_drivers_id = is_array($val) ? $val : [];
}
public function save($runValidation = true, $attributeNames = null)
{
$t = self::getDb()->beginTransaction();
try {
if (parent::save($runValidation, $attributeNames)) {
Тут удаляю всех водителей которые уже были записаны
CarDriver::deleteAll([
'car_id' => $this->id,
]);
И записываю всех что пришли с формы
foreach ($this->_assistants_id as $driver) {
CarDriver::create($this->id, $driver);
}
$t->commit();
return true;
}
} catch (\Exception $e) {
$t->rollBack();
throw $e;
}
return false;
}
Правильно ли это?