Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查对象/行是否仍被其他对象引用?_Php_Yii_Reference_Foreign Keys - Fatal编程技术网

Php 如何检查对象/行是否仍被其他对象引用?

Php 如何检查对象/行是否仍被其他对象引用?,php,yii,reference,foreign-keys,Php,Yii,Reference,Foreign Keys,大家都知道,如果一个数据库行被另一个数据库行引用,则除非首先删除引用该行的数据库行,否则无法删除该数据库行 我已经使用Yii一段时间了,我有一个问题,下面是我的场景: 假设已加载两种类型的对象: $object1 = Model1::model()->findByPk($pk); $object2 = Model2::model()->findByPk($pk); 现在,每个$object1都有指向$object2的外键,我们都知道,如果考虑到fk关系,$object1尚未删除,则

大家都知道,如果一个数据库行被另一个数据库行引用,则除非首先删除引用该行的数据库行,否则无法删除该数据库行

我已经使用Yii一段时间了,我有一个问题,下面是我的场景:

假设已加载两种类型的对象:

$object1 = Model1::model()->findByPk($pk);
$object2 = Model2::model()->findByPk($pk);
现在,每个$object1都有指向$object2的外键,我们都知道,如果考虑到fk关系,$object1尚未删除,则$object2无法删除。Yii中是否有方法/功能检查是否还有其他对象仍然引用到$object2

比如:


我知道这可以通过确保先删除$object1来实现。但不管object1是否被删除,是否有一个函数可以执行此检查?任何想法或代码都会有帮助

这确实是一个数据库问题。基本上,您需要对与要删除的表相关的每个表外键进行查询

但根据您的需求,有许多解决方案

但最简单的方法是捕获在尝试删除时抛出的数据库异常

例如

这是非常基本的,因为您不知道哪些表导致外键冲突


否则,您需要编写代码来检查每个外键(这可能可以使用Yii拥有的数据库元数据来完成)

谢谢您,先生!我真的想过检查所有匹配的object1的外键,如果它们仍然引用object2,…很高兴这更容易!
if(//$object2 has no longer any other objects referring to it){
$object2->delete();
//do something here
}
try
{
    $object2->delete();
}
catch(CDbException $ex)
{
    //unable to delete code here
}