我在MySQL中有一个表有一个ManyToMany字段,我想截断表,但是当我尝试它时,我得到以下错误:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint ...
我正在使用Symfony和Doctrine,但如果有可能,我有兴趣通过控制台学习如何做到这一点
class Project {
/**
* @ORM\ManyToMany(targetEntity="Shipping", mappedBy="projects")
**/
private $employee;
}
class Employee{
/**
* @ORM\ManyToMany(targetEntity="Product", inversedBy="employee")
* @ORM\JoinTable(name="middle_table")
**/
protected $projects;
}
答案 0 :(得分:1)
外键表示您有两个表,每个更新必须与外键约束引用的表兼容。
可靠的解决方案在这里:How do I truncate tables properly?
SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.
答案 1 :(得分:0)
现在,middle_table中的外键不允许您从Projects表中删除记录。换句话说,您在middle_table中有一个指向Project的链接,它没有机会从Project中删除行。因此,您应该更改外键的定义以允许删除,您可以设置为null链接或进行级联删除。我更喜欢第二个选项,所以将注释更改为以下,它应该允许你删除Projects表中的行,它也会删除中间表中Project的链接。
class Project {
/**
* @ORM\ManyToMany(targetEntity="Shipping", mappedBy="projects", cascade={"remove"})
**/
private $employee;
}
文档:
Doctrine association mapping
mysql foreign key contraint