dongying6659
2019-03-25 14:40
浏览 143
已采纳

Symfony - 如何从实体中删除数组中的特定元素

I have a Packages entity (manyToMany with the entityTypeUser that creates me in the DB the package_des_users entity). My Packages entity therefore contains an array of TypeUser (because a package can be assigned to several types of users).

I want to be able to delete one of the elements that are part of the TypeUser array of one of my packages.

My plan of action was:

  1. Retrieve the package to process
  2. Retrieve the name of the TypeUser to remove from the TypeUser array of the package.
  3. Do a check: If the package contains only one typeUser, the package is deleted directly. If it contains more than one, just delete the chosen TypeUser.

For now, I was able to recover the package to be processed as well as the name of the TypeUser to delete, and the number of TypeUser that contained my package. If it contains only one, it suppresses it well. The problem remains for the other case.

Being a beginner in Symfony 3.4, I have a hard time understanding how to do it right.

My controller.php function :

    /**
     * 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');

My entity (paquet) function :


    /**  
     * @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);
    }

I would therefore like to be able to retrieve the corresponding TypeUser object (the result being unique) from the controller so that I can pass it as a parameter to a function that will take care of removing it from the TypeUser array of my package. Then that translates into the database.

Thanks for your help !

2条回答 默认 最新

相关推荐 更多相似问题