Yii Framework 2.0阻止删除id被用作外键的任何记录

时间:2015-01-12 13:16:13

标签: php relational-database yii2 sql-delete restriction

我有一个关系数据库,其中一个表中的记录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

1 个答案:

答案 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);
}