我有一个关系数据库,其中一个表中的记录ID被用作其他关系表中的外键。我有一个删除操作。当然我想防止删除任何id被用作另一个表中的外键的记录。我的解决方案是通过我要删除的记录的id逐个查找所有关系表中的记录。如果根本找不到任何内容,则允许删除它。但是这个解决方案效率不高,因为你需要逐个在所有关系表中找到记录。
当然,MySQL有一些关系限制,例如ON DELETE RESTRICT或NO ACTION。但是当我删除一个id正在另一个表中使用的记录时,我收到一些错误消息,其中包含一些我不想显示的源代码。我尝试使用try catch如下,但它不起作用。
$model= $this->findModel($id);
try {
$model->delete();
} catch(Exception $e) {
throw new \yii\web\ForbiddenHttpException('Could not delete this record.' . $e);
}
但尝试捕获对我不起作用。是否有任何其他解决方案来检查是否在其他关系表中使用了记录的ID?我正在使用Yii framework 2.0
答案 0 :(得分:3)
您应该只是抓住IntegrityException
:
$model= $this->findModel($id);
try {
$model->delete();
} catch(\yii\db\IntegrityException $e) {
throw new \yii\web\ForbiddenHttpException('Could not delete this record.' . $e);
}