首页 > 解决方案 > Symfony 4 - 无法持续​​级联我的实体(错误:通过关系找到了一个新实体)

问题描述

在我的 symfony 4 项目中,我有:

GroupeValidateurs.php:

/**
     * @ORM\OneToMany(targetEntity="App\Entity\Validateur", mappedBy="groupeValidateurs", orphanRemoval=true, cascade={"persist", "remove"})
     * @ORM\OrderBy({"ordre" = "ASC"})
     */
    private $validateurs;

Validateur.php:

/**
 * Ordre de validation
 * @ORM\Column(type="integer")
 * @Gedmo\Mapping\Annotation\SortablePosition
 */
private $ordre;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="validateurs")
 * @ORM\JoinColumn(nullable=false)
 */
private $validateur;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\GroupeValidateurs", inversedBy="validateurs")
 * @ORM\JoinColumn(nullable=false)
 */
private $groupeValidateurs;

User.php

/**
     * @ORM\OneToMany(targetEntity="App\Entity\Validateur", mappedBy="validateur", orphanRemoval=true, cascade={"persist"})
     */
    private $validateurs;

当我在 GroupeValidateurs 页面上时:

在此处输入图像描述

如果我添加一个新的“Validateur”(在示例中,我将添加 KELLEN Russel),然后提交,我有这个:

HTTP 500 内部服务器错误通过关系“App\Entity\GroupeValidateurs#validateurs”找到了一个新实体,该实体未配置为对实体进行级联持久操作:KELLEN Russel。要解决这个问题:要么在这个未知实体上显式调用 EntityManager#persist(),要么配置级联在映射中保持此关联,例如 @ManyToOne(..,cascade={"persist"})。

根据错误消息,我添加cascade={"persist", "remove"})GroupeValidateurs#validateurs但问题是一样的

有人能帮助我吗 ?

更新:当我编辑我的“GroupeValidateurs”以添加新的“Validateur”时,我有我的功能服务:

/**
     * Edite un groupe validateurs
     *
     * @param array $oldUsers
     * @param array $newUsers
     * @param GroupeValidateurs $nouveauGroupe
     * @return array $flash message $flash
     */
    public function editGroupeValidateurs($oldUsers, $newUsers, GroupeValidateurs $nouveauGroupe)
    {
        if ($this->isValidGroupeValidateurs($nouveauGroupe)) {

            $comparaison = $this->compareBeforeAfter($oldUsers, $newUsers);

            $this->updateValidationAbsences($nouveauGroupe, $this->getAbsencesFromGroupe($nouveauGroupe));
            $this->isValidatorOtherGroup($comparaison["validateursSupprimes"], $nouveauGroupe);
            $this->traiterRoleSuperValidateurEdit($oldUsers, $newUsers, $nouveauGroupe);
            $this->traiterRoleChefServiceEdit($oldUsers, $newUsers, $nouveauGroupe);
            $this->setRolesValidateurs($nouveauGroupe);

            foreach($nouveauGroupe->getValidateurs() as $validateur)
            {
                $this->manager->persist($validateur);
            }

            $this->manager->persist($nouveauGroupe);
            $this->manager->flush();

所以我做了一个循环来持久化“GroupeValidateurs”的所有“Validateur”

标签: phpsymfonyentitycascadepersist

解决方案


推荐阅读