FitTech
@FitTech

Как правильно сохранить данные в таблицу?

Расскажу свой способ сохранения, а кто знает как правильнее, то прошу подсказать:
Есть главная модель 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;
    }


Правильно ли это?
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы