在symfony和doctrine中捕获完整性约束错误

时间:2011-07-20 10:45:29

标签: php symfony1 doctrine

我有两张桌子: 分类:

|id | cat_name  |
| 1 | nameone   |
| 2 | nametwo   |   
| 3 | namethree |

新闻:

| id | id_cat | title    |
| 1  | 1      | title1 |
| 2  | 2      | title2 |
| 3  | 3      | title3 |
| 4  | 3      | title4 |
| 5  | 3      | title5 |

我使用 doctrine:generate-module后端类别类别,我有一个列表类别 executeEdit ,更新等。如果我删除类别ID 3 - namethree然后我得到以下错误

  

SQLSTATE [23000]:完整性约束违规:1451无法删除或   更新父行:外键约束失败。

如何确保删除类别3,然后将所有类别3的新闻移至类别2,例如没有错误?怎么能抓到这个?

1 个答案:

答案 0 :(得分:0)

您必须为News配置表架构,以便使用ON DELETE处理外键更改:“设置为null”或“设置为默认值”或“设置为特定值”,或“删除”。但是,不确定你是否可以做到这一点,但是如果你认为这是疯狂的:你有正确的参考完整性,因为你希望你的关系得到严格执行。如果删除类别行,随机更改它们将与此完全相反。

很多通过首先UPDATE要修改的行来更好地自行处理。

UPDATE News SET id_cat = 2 WHERE id_cat = 3;
DELETE FROM Category WHERE id = 3;

(我不知道适当的Symfony / Doctrine方法会影响这个。)

您的可用选项取决于您的数据库。您可以随时说ON DELETE CASCADE删除所有相关行;您可能有或没有其他选择。