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 12puis 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 21Ce que j'obtiens
id / culture_id
1 10 2 11 3 12puis 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 | 21Je 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