如何截断MySQL中使用ManyToMany字段的表

时间:2016-05-29 15:56:14

标签: php mysql symfony many-to-many

我在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;
}

2 个答案:

答案 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