删除 Symfony4 时的外键和级联问题

阿尔泽奥

一个实体项目可以有很多人,很多chapitres,每个项目一个highConcept。并且用户可以有很多项目。然后,当我想删除一个项目时,我收到以下错误消息:

执行“DELETE FROM projets WHERE id = ?”时发生异常 使用参数 [2]:

SQLSTATE[23000]: 完整性约束违规:1451 无法删除或更新父行:外键约束失败 ( writtle. personnages, CONSTRAINT FK_286738A6C18272FOREIGN KEY ( projet_id) REFERENCES projets( id))

这是我的实体:

实体字符

/**
     * @ORM\ManyToMany(targetEntity="App\Entity\Chapitre", mappedBy="personnages")
     * @ORM\JoinColumn(name="projet_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $chapitres;

  /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Projets", inversedBy="personnages")
     * @ORM\JoinColumn(name="projet_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $projet;

项目实体

/**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="projets")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Personnages", mappedBy="projet")

     */
    private $personnages;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Chapitre", mappedBy="projet", cascade={"remove"})
     * @ORM\joinColumn(onDelete="SET NULL")
     */
    private $chapitres;

实体篇

 /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Projets", inversedBy="chapitres")
     */
    private $projet;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Personnages", inversedBy="chapitres")
     */
    private $personnages;

高概念


/**
     * @ORM\OneToOne(targetEntity="App\Entity\Projets", cascade={"persist", "remove"})
     */
    private $projet;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="highconcepts")
     */
    private $user;

用户实体

/**
     * @ORM\OneToMany(targetEntity="App\Entity\Projets", mappedBy="user")
     */
    private $projets;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Highconcept", mappedBy="user")
     */
    private $highconcepts;

我不知道如何将其联系起来,我尝试了一些类似的事情JoinColumn ondelete cascade......我看到了一些主题,但我认为我正确地使用了它。

皮埃里克·兰博

考虑到您要删除项目中包含的所有实体,我建议您使用Doc 中orphanRemoval解释选项

级联的另一个概念只有在从集合中删除实体时才相关。如果类型 A 的实体包含对私有实体 B 的引用,那么如果从 A 到 B 的引用被删除,则实体 B 也应该被删除,因为它不再被使用。

使您的实体成员看起来像:

/**
* @ORM\OneToMany(targetEntity="App\Entity\Personnages", mappedBy="projet", orphanRemoval=true)
*/
private $personnages;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章