J'ai trois entités. "Bordereau", "Stagiaire", "BordereauStagiaire".
J'ai créé un formulaire en plusieurs étapes où je crée un nouveau Bordereau et je dois montrer à l'utilisateur les "Stigiaires" sélectionnés puis le valider. Bordereau et Stagiaire sont liés via la table BordereauStagiaire.
J'ai réussi à récupérer les identifiants Bordereau et Stagiaire dans le contrôleur via le nouveau formulaire Bordereau. Mais je cherche un moyen de créer un nouveau BordereauStagiaire lorsqu'un nouveau Bordereau est créé.
C'est la méthode que j'ai commencé à mettre en œuvre. Backend, le Bordereau sera créé en premier, puis le BS sera créé avec le nouveau Bordereau et les stagiaires sélectionnés. La table BS a l'identifiant Bordereau, l'identifiant Stagiaire et le montant (un autre attribut).
Comment créer un nouveau BordereauStagiaire en utilisant l'ID du Bordereau et l'ID des Stagiaires que j'ai obtenu du formulaire ?
C'est mon contrôleur
#[Route('/create/bordereau', name: 'app_bordereau_create', methods: ['GET','POST'])] public function createBordereauAction(CreateBordereauFlow $flow, PersistenceManagerRegistry $doctrine) { $formBordereau = new Bordereau(); $formBordStag = new BordereauStagiaire(); $formBordereau->setUser($this->getUser()); $flow->bind($formBordereau); $form = $flow->createForm(); if ($flow->isValid($form)) { $flow->getCurrentStepNumber($form); $flow->saveCurrentStepData($form); if ($flow->nextStep()) { $form = $flow->createForm(); $flow->getCurrentStepNumber($form); $flow->saveCurrentStepData($form); // dd($form['stagiaire']->getData()[0]->getId()); // dd($form->getData()); } else{ $entityManager = $doctrine->getManager(); $entityManager->persist($formBordereau); $entityManager->flush(); // dd($formBordereau->getId()); return $this->redirectToRoute('app_bordereau_index'); } } // if ($flow->redirectAfterSubmit($form)) { // // $request = $this->getRequest(); // $params = $this->formFlowUtil->addRouteParameters(array_merge($request->query->all(), // $request->attributes->get('_route_params')), $flow); // return $this->redirectToRoute($request->attributes->get('_route'), $params); // } return $this->render('bordereau/create_bordereau.html.twig', [ 'form' => $form->createView(), 'flow' => $flow, 'formBordereau' =>$formBordereau, ]); }
Voici ce que j'ai obtenu du formulaire php $form['stagiaire']->getData()[0]->getId()
和 bordereau 获取数据的方式,我在持久化后获取其 id刷新到数据库中。 php $formBordereau->getId()
Ce que j'ai écrit était une réponse, mais c'était plutôt un commentaire avec beaucoup de texte.
Tout d'abord, je vous recommande d'utiliser uniquement des variables nommées en anglais, évitez au moins d'utiliser des noms d'opération comme
bordereau
来命名诸如create
.Donnez ensuite un nom à la variable que vous utiliserez :
$formBordereau
不是表单,它是一个实体,您应该只使用$bordereau
.Eh bien, vous avez besoin de cette entité
BordereauStagiaire
吗?我知道这是一个ManyToMany
relation, Symfony et Doctrine la gèrent directement via des entités, vous n'avez pas besoin de cette troisième entité.Doctrine est un ORM, ce qui signifie que vous ne pouvez travailler avec des objets, pas des identifiants, que si vous concevez correctement les relations, votre
Bordereau
实体中应该有一个方法addStagiaire
et vice versa.Vous devez alors appeler cette méthode avec l'objet suivant :