Yii Framework 2.0 предотвращает удаление любой записи, идентификатор которой используется в качестве внешнего ключа

У меня есть реляционная база данных, идентификатор записей в одной таблице которой используется в качестве внешнего ключа в других реляционных таблицах. У меня есть операция удаления. Конечно, я хочу предотвратить удаление любой записи, идентификатор которой используется в качестве внешнего ключа в другой таблице. Мое решение состоит в том, чтобы найти запись во всех реляционных таблицах одну за другой по идентификатору записи, которую я хочу удалить. Если вообще ничего не найдено, разрешается удалить. Но это решение неэффективно, так как вам нужно найти запись во всех реляционных таблицах одну за другой.

Конечно, MySQL имеет некоторые реляционные ограничения, такие как ON DELETE RESTRICT или NO ACTION. Но затем, когда я удаляю запись, идентификатор которой используется в другой таблице, я получаю сообщение об ошибке с некоторым исходным кодом, который я не хочу показывать. Я пытался использовать try catch следующим образом, но он не работает.

$model= $this->findModel($id);
try {
     $model->delete();
} catch(Exception $e) {
     throw new \yii\web\ForbiddenHttpException('Could not delete this record.' . $e);
}

Но try catch у меня не работает. Есть ли другое решение для проверки того, используется ли идентификатор записи в другой реляционной таблице? Я работаю с Yii Framework 2.0.


person O Connor    schedule 12.01.2015    source источник


Ответы (1)


Вы должны просто поймать IntegrityException :

$model= $this->findModel($id);
try {
     $model->delete();
} catch(\yii\db\IntegrityException $e) {
     throw new \yii\web\ForbiddenHttpException('Could not delete this record.' . $e);
}
person soju    schedule 12.01.2015