ThE*_*hOp 5 orm model symfony doctrine-orm symfony4
我有 2 个实体:信息和可能的答案\n信息可以被视为一个问题,根据其类型,它可以有可能的答案。它还可以有一个子信息,如果父信息有可能的答案,其中之一将触发子显示。
\n\n信息类:
\n\n/**\n * @ORM\\Entity(repositoryClass="App\\Repository\\InformationRepository")\n */\nclass Information\n{\n\n use DateTrait;\n\n /**\n * @ORM\\Id()\n * @ORM\\GeneratedValue()\n * @ORM\\Column(type="integer")\n */\n private $id;\n\n /**\n * @var string\n *\n * @ORM\\Column(type="string")\n * @Assert\\NotBlank()\n */\n private $name;\n\n /**\n * @var string\n *\n * @ORM\\Column(type="string")\n * @Assert\\NotBlank()\n */\n private $type;\n\n /**\n * @ORM\\OneToMany(targetEntity="App\\Entity\\PossibleAnswer", mappedBy="information", cascade={"persist", "remove"}, orphanRemoval=true)\n */\n private $possibleanswers;\n\n /**\n * One Information has Many Informations.\n * @ORM\\OneToMany(targetEntity="Information", mappedBy="parent", cascade={"remove"}, orphanRemoval=true)\n * @ORM\\OrderBy({"rank" = "ASC"})\n */\n private $children;\n\n /**\n * Many Informations have One Information.\n * @ORM\\ManyToOne(targetEntity="Information", inversedBy="children")\n */\n private $parent;\n\n /**\n * r\xc3\xa9ponse qui d\xc3\xa9clenche une sous question\n * @ORM\\ManyToOne(targetEntity="PossibleAnswer")\n */\n private $trigger;\nRun Code Online (Sandbox Code Playgroud)\n\n可能的答案类别:
\n\n/**\n * @ORM\\Entity(repositoryClass="App\\Repository\\PossibleAnswerRepository")\n */\nclass PossibleAnswer\n{\n\n use DateTrait;\n\n /**\n * @ORM\\Id()\n * @ORM\\GeneratedValue()\n * @ORM\\Column(type="integer")\n */\n private $id;\n\n /**\n * @ORM\\ManyToOne(targetEntity="App\\Entity\\Information", inversedBy="possibleanswers")\n */\n private $information;\n\n /**\n * @var string\n *\n * @ORM\\Column(type="string")\n * @Assert\\NotBlank()\n */\n private $value;\nRun Code Online (Sandbox Code Playgroud)\n\n现在我想删除特定信息并删除每个可能的答案或子信息。但有些删除案例不起作用:
\n\n在情况 4 中:
\n\n\n\n\n使用参数 [28] 执行 \'DELETE FROM possible_answer\n WHERE id = ?\' 时发生异常:
\n\nSQLSTATE[23000]: 完整性约束冲突: 1451 无法删除或更新父行: 外键约束失败\n ( .
\nevisa,informationCONSTRAINTFK_297918835FDDDCD6FOREIGN KEY\n (trigger_id) REFERENCESpossible_answer(id))
案例5:
\n\n\n\n\n使用参数 [56] 执行“DELETE FROM information WHERE\n id = ?\”时发生异常:
\n\nSQLSTATE[23000]: 完整性约束冲突: 1451 无法删除或\n 更新父行: 外键约束失败\n (
\ndb.possible_answer, CONSTRAINTFK_3D79739D2EF03101FOREIGN\n KEY (information_id) REFERENCESinformation(id))
我在级联中遗漏了一些东西,无法正确删除所有内容,但我找不到它是什么。
\n小智 7
您正在使用 ORM 级联,您想要实现的是数据库级级联http://www.inanzzz.com/index.php/post/6s4g/one-to-many-association-cascade-example-with-doctrine -annotations
你需要的是onDelete="CASCADE"
例如:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Information", inversedBy="possibleanswers")
* @JoinColumn(onDelete="CASCADE")
*/
private $information;
总是使用 JoinColumn 你将对你的代码有更多的控制权并手动命名列,否则你的数据库最终会变得一团糟,有些名字会是 CamelCase ,有些是 Snake_case 。