1

当我使用 InnoDB 表时,我从 InnoDB 引擎捕获了 FK 约束异常。

我知道Yii可以根据relationship()获取相关表。此外,我需要在其他 CRUD 操作(例如插入、更新和删除)期间检查引用完整性。

是否有一些 Yii 本机机制来执行此操作?或者我应该为此检查编写额外的代码?

4

1 回答 1

1

为了避免来自数据库的错误,您需要编写额外的代码来处理这个问题。我使用模型的 beforeDelete() 方法来管理它。编写一个 if 条件来检查使用模型关系的参照完整性违规。然后,您可以删除违规记录或通过不返回“parent::beforeDelete()”来中止删除。

在这个来自用户模型的多对多示例中,我们可以将“return parent::beforeDelete()”调用包装在 if 中,以通过以下方式检查模型的关系():

 protected function beforeDelete() {
            if (empty($this->tasks))
            return parent::beforeDelete();
        }

如果发现用户有任何分配的任务,删除将中止。

作为参考,模型中的关系看起来像这样,需要第三个表:

'tasks' => array(self::MANY_MANY, 'Task', 'task_assignment(user_id,task_id)'),

这个例子是非常基础的,显然你可能想要实现一种更复杂的方式来处理这些场景,其中可能包括删除相关记录,甚至更新它们以删除它们的外键引用。你必须决定什么对你的每个模型及其关系最有效和有意义。

于 2013-04-05T13:44:43.993 回答