Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony - Supprimer élément array d'une entité

Comment supprimer un élément d'un champs array d'une entité

    25 mars 2019 à 15:52:10

    Bonjour !

    J'ai une entité Packages (manyToMany avec l'entité entityTypeUser qui me crée dans la base de données l'entité package_des_users). L'entité Mes packages contient donc un tableau de TypeUser (car un package peut être affecté à plusieurs types d'utilisateurs).

    Je veux pouvoir supprimer l'un des éléments qui font partie du tableau TypeUser de l'un de mes packages.

    Mon plan d'action était:

    1. Récupérer le colis à traiter

    2. Récupérez le nom du TypeUser à supprimer du tableau TypeUser du package.

    3. Faire une vérification: si le package ne contient qu'un seul typeUtilisateur, il est directement supprimé. S'il en contient plusieurs, supprimez simplement le TypeUser choisi.

    Pour l'instant, j'ai pu récupérer le paquet à traiter, ainsi que le nom du TypeUser à supprimer et le nombre de TypeUser contenant mon paquet. S'il n'en contient qu'un, il le supprime bien. Le problème reste pour l'autre cas.

    En tant que débutant dans Symfony 3.4, j'ai du mal à comprendre comment le faire correctement.

    Ma fonction controller.php:

        /**
         * Deletes a paquet entity.
         *
         * @Route("/{id}/{type}/delete", name="paquets_delete")
         */
        public function deleteAction(Request $request, $id, $type)
        {
            $em = $this->getDoctrine()->getManager();
            $unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id);
    
            $nbTypes = count($unPaquet->getTypeUser());
    
            if($nbTypes == 1)
            {
                $em->remove($unPaquet);
            }
    
            else
            {
                $am = $this->getDoctrine()->getManager();
                $leType = $am->getRepository('PagesBundle:TypeUser') 
    ->findByTypeUtilisateur($type);
                $em->$unPaquet->deleteTypeFromTypesUser($leType);
            }
    
            $em->flush();
    
            return $this->redirectToRoute('paquets_index');

    La fonction de mon entité (paquet.php) :

        /**  
         * @var \Doctrine\Common\Collections\Collection
         * @ORM\ManyToMany(targetEntity="TypeUser")  
         * @ORM\JoinTable(name="Packages_des_TypesUser") 
         * @ORM\JoinColumn(nullable=false)
         */  
        private $typeUser;
    
        public function __construct()
        {
            $this->typeUser = new ArrayCollection();
        }
    
        /** 
         * Get TypeUser 
         * 
         * @return Site\PagesBundle\Entity\TypeUser 
         */ 
        public function getTypeUser() 
        { 
            return $this->typeUser; 
        }
    
        public function deleteTypeFromTypesUser(TypeUser $type)
        {
            $this->typeUser->removeElement($type);
        }

    Merci !



    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2019 à 16:26:23

      Salut!

      Pour supprimer un élément tu dois faire un Remove sur l'entité propriétaire de la relation (ici Paquet)

      essaie de remplacer ça

      $em->$unPaquet->deleteTypeFromTypesUser($leType);

      par

      $unPaquet->removeTypeUser($leType);

      (à vérifier le nom de ta fonction dans ton entité Paquet)


      • Partager sur Facebook
      • Partager sur Twitter

      Symfony - Supprimer élément array d'une entité

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown