Bonjour, j'ai un problème avec le cascade persist ou merge, je m'explique j'ai une application avec des taches ('tasks') puis une table entity (task_implements) *véhicule

Quand je crée une tache je choisi des cultures qui sont liées, si l'utilisateur choisi 3 cultures cela crée 3 taches pour les 3 culture en relation en db

Donc si l'utilisateur choisi 3 cultures puis 2 véhicules cela doit créer 3 taches avec dans chaque tache 2 véhicules bind

TaskController new()

if ( $form->isSubmitted() && $form->isValid() ) {
            // Cultures
            foreach ( $form->get('cultures')->getData() as $culture) {
                // Set correct status
                if ( $task->getUser() === null ) {
                    $task->setStatus( 2 );
                } else {
                    $task->setStatus( 3 );
                }
                $task->setCulture( $culture );

                // Implements

                foreach ( $form->get('implements')->getData() as $implement) {
                    $taskImplement = new TaskImplement();
                    $taskImplement->setImplement( $implement );

                    $task->addImplement( $taskImplement );
                }

                $this->em->merge( $task );
                $this->em->flush();
            }

            $this->addFlash('success', 'Nouvelle tache ajoutée avec succès');
            return $this->redirectToRoute('admin_task_index');
        }

TaskNewType

->add('implements', EntityType::class, [
                'class' => Implement::class,
                'query_builder' => function( ImplementRepository $ir ) {
                    return $ir->createQueryBuilder('i');
                },
                'choice_label' => function( Implement $implement ) {
                    return $implement->getName();
                },
                'mapped' => false,
                'required' => false,
                'expanded' => true,
                'multiple' => true
            ])

TaskEntity

/**
     * @ORM\OneToMany(targetEntity=TaskImplement::class, mappedBy="task", orphanRemoval=true, cascade={"persist", "merge"})
     */
    private $implements;

public function addImplement(TaskImplement $taskImplement): self
    {
        if (!$this->implements->contains($taskImplement)) {
            $this->implements[] = $taskImplement;
            $taskImplement->setTask($this);
        }

        return $this;
    }

Ce que je veux

Pour exemple : je doit avoir dans la table task

id / culture_id

1 10 2 11 3 12

puis dans la table task_implement

id / task_id / implement_id

1 1 20 2 1 21 3 2 20 4 2 21 5 3 20 6 3 21

Ce que j'obtiens

id / culture_id

1 10 2 11 3 12

puis dans la table task_implement

id / task_id / implement_id

1 | 1 | 20 @ 2 | 1 | 21 3 | 2 | 20 @ 4 | 2 | 21 @ 5 | 2 | 20 @ 6 | 2 | 21 7 | 3 | 20 @ 8 | 3 | 21 @ 9 | 3 | 20 @ 10 | 3 | 21 @ 11 | 3 | 20 @ 12 | 3 | 21

Je ne comprend pas pourquoi ça ce ne clear pas entre chaque enregistrement en DB et ça ce duplique si je met 4 cultures j'ai 4 entrés sur le dernier TaskImplement

Merci de votre aide

Aucune réponse