Php 如果模型具有外键,则阻止删除的可能性

Php 如果模型具有外键,则阻止删除的可能性,php,foreign-keys,yii2,relationship,Php,Foreign Keys,Yii2,Relationship,嗨,我有一个和他有关的模型。我可以在这张表上显示我的关系: 这个 相关类别 和这个一样吗 身份证 。这是类别和子类别的表。我想阻止删除的可能性,如果模型有外键。当用户想要删除其在Rel_类别中输入外键的类别时,抛出一些异常或flash。所以,如果用户想要删除id=54的测试,那么它应该显示一些错误,这个类别有一个子类别,用户应该首先删除这个子类别(id=51和id=53)。 更新: 在我的数据库中,我没有删除和更新操作 您应该在数据库中处理此问题,您可以在控制器中尝试: if (count($

嗨,我有一个和他有关的模型。我可以在这张表上显示我的关系:

这个

相关类别

和这个一样吗

身份证

。这是类别和子类别的表。我想阻止删除的可能性,如果模型有外键。当用户想要删除其在Rel_类别中输入外键的类别时,抛出一些异常或flash。所以,如果用户想要删除id=54的测试,那么它应该显示一些错误,这个类别有一个子类别,用户应该首先删除这个子类别(id=51和id=53)。 更新: 在我的数据库中,我没有删除和更新操作

您应该在数据库中处理此问题,您可以在控制器中尝试:

if (count($model->smCategories)) {
    Yii::app()->user->setFlash('error', 'This category has sub categories and cannot be deleted.');
} else {
    $model->delete();
}

创建数据库表时,应定义此类约束:

CREATE TABLE `Category` (         
    ...

    CONSTRAINT `SelfReference` FOREIGN KEY (`Rel_Category`) REFERENCES `Category` (`Id`) ON DELETE RESTRICT ON UPDATE CASCADE
    ....
);


这里的想法是MySQL将维护您的数据完整性约束

你应该在你的表定义中这样做,而不是通过PHP?我试着去做如果Rel_分类=Null然后删除,但我不知道下一步该怎么做您可以通过PHP执行此操作,但不应该这样做,因为您将遇到事务性和/或并发性问题。假设您已检查某个类别是否为空,并准备将其删除。在检查和删除之间,并行请求已使类别为空。你们怎么处理这个问题呢?你们能告诉我一些步骤吗?或者我怎样在数据库中处理它?我在Workbench上工作,我知道我应该在这个程序中处理这个问题?谢谢,它可以工作:)你是说在我的数据库中处理这个问题?Yii2文档中是否有如何执行的步骤?我在workbench工作,所以我应该在那里做些什么?@qwerty On delete需要
RESTRICT
好的,谢谢当我使用RESTRICT时,我删除时有更多的机会逃脱错误?:)因为在这个页面上我可以阅读:对于未指定的On delete或On UPDATE,默认操作总是RESTRICT。