@AlexKuznec

Yii2 ошибка триггера при попытке удалить запись?

У меня есть 2 связанные таблицы в MySQL, созданные через миграции: 'food' и 'import_log'. В последней есть триггер, запрещающий удаление связанной записи из 'food':
// add foreign key for table `food`
        $this->addForeignKey(
            'fk-import_log-food_id',
            'import_log',
            'food_id',
            'food',
            'id',
            'RESTRICT'
        );


Я точно не помню, но раньше вроде бы выдавалось нормальное сообщение, что запись удалить невозможно.
Сейчас выскакивает ошибка:
Caused by: PDOException
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`food`.`import_log`, CONSTRAINT `fk-import_log-food_id` FOREIGN KEY (`food_id`) REFERENCES `food` (`id`))

in C:\server\data\htdocs\site\vendor\yiisoft\yii2\db\Command.php at line 846

Это так и должно быть, или я что-то закосячил?
  • Вопрос задан
  • 621 просмотр
Решения вопроса 1
@AlexKuznec Автор вопроса
Как подсказал padlyuck, Yii2 самостоятельно не обрабатывает запреты триггеров в базе на удаление, поэтому пришел в такому варианту экшена удаления:

public function actionDelete($id)
    {
        try {
            $this->findModel($id)->delete();
            Yii::$app->session->setFlash('success', Yii::t('app', 'controller.Food.deleted'));
        } catch (\Exception $e) {
            Yii::$app->session->setFlash('error', Yii::t('app', 'controller.Food.cannot_delete'));
        }
        
        return $this->redirect(['index']);
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
padlyuck
@padlyuck
$this->addForeignKey(
'fk-import_log-food_id',
'import_log',
'food_id',
'food',
'id',
'SET NULL'
);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы