我有两个表,它们是:类别:
|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 |
我使用原则:生成模块后端类别类别,我有一个列表类别与executeEdit,更新等。如果我删除类别id 3 - namethree,那么我得到以下错误
SQLSTATE[23000]: Integrity constraint violation: 1451更新父行:外键约束失败。
我如何确保如果我删除类别3,那么类别3的所有新闻都移动到类别2,例如没有错误?怎么才能抓到这个?
您必须为News
配置表模式以处理ON DELETE
的外键更改:要么"set to null",要么"set to default",要么"set to specific value",要么"delete"。虽然不确定是否可以在变量中做到这一点,但是如果您考虑一下,这将是疯狂的:您具有引用完整性正是因为您希望严格执行您的关系。如果你删除一个类别行,随机改变它们将完全违背这一点。
最好先将要修改的行UPDATE
正确地处理。
UPDATE News SET id_cat = 2 WHERE id_cat = 3;
DELETE FROM Category WHERE id = 3;
(我不知道合适的Symfony/Doctrine方法来影响这个)
可用选项取决于您的数据库。您总是可以使用ON DELETE CASCADE
来删除所有相关行;