Yii2: удалить записи из соединительной таблицы до сохранения / после сохранения

Я пытаюсь удалить записи из соединительной таблицы. Когда frequentie равно 2 (ежедневно), я использую таблицу соединений для соединения planning_id's с dagen_id's. Но когда frequentie get обновляется, например, еженедельно, мне нужно удалить все эти planning_id's из таблицы соединений.

Вот что я пробовал до сих пор:

 public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            $this->gewijzigd_op = new \yii\db\Expression('NOW()');
            $this->gewijzigd_door = Yii::$app->user->id;
            if ($this->getOldAttribute('frequentie') != $this->frequentie) {
                if ($this->getOldAttribute('frequentie') == 2) {
                    PlanningDagen::deleteAll(['planning_id' => $this->planning_id]);
                }    
            }
            return true;
        } else {
            return false;
        }
    }

С использованием:

$query = new \yii\db\Query();
                    $query->createCommand()->delete('planning_dagen', ['planning_id' => $this->planning_id)->execute();

вместо:

PlanningDagen::deleteAll(['planning_id' => $this->planning_id]);

Тоже не работает.


person JK87    schedule 01.02.2016    source источник


Ответы (1)


Решил с помощью afterSave:

public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);
    if (!$insert) { // since $insert is false, a database update happend instead of an insertion
        if ($changedAttributes['frequentie'] == 2 && $this->frequentie != 2) { // $changedAttributes is an array which holds the attribute-values from BEFORE the update, so you can compare them with $this (active record).
            PlanningDagen::deleteAll('planning_id = :id', [':id' => $this->planning_id]);                       
        }
    }
}
person JK87    schedule 02.02.2016