我有三个实体。 “Bordereau”、“Stagiaire”、“BordereauStagiaire”。
我创建了一个多步骤表单,在其中创建一个新的 Bordereau,我需要向用户显示选定的“Stigiaires”,然后验证它。 Bordereau 和 Stagiaire 均通过表 BordereauStagiaire 链接。
我设法通过新的 Bordereau 形式在控制器中获取了 Bordereau 和 Stagiaire id。但我正在寻找一种在创建新的 Bordereau 时创建新的 BordereauStagiaire 的方法。
这是我已经开始实施的方法。后端,将首先创建 Bordereau,然后将使用新的 Bordereau 和选定的 stagiaires 创建 BS。BS 表具有 Bordereau id、Stagiaire id 和 amount(另一个属性)。
如何使用 Bordereau 的 ID 和我从表单中获得的 Stagiaires 的 ID 创建一个新的 BordereauStagiaire?
这是我的控制器
#[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,
]);
}
这是我从表单 php $form['stagiaire']->getData()[0]->getId() 和 bordereau 获取数据的方式,我在持久化后获取其 id刷新到数据库中。 php $formBordereau->getId()
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我写的是一个答案,但它更像是一条包含大量文字的评论。
首先,我建议您仅使用英文命名变量,至少避免使用
bordereau来命名诸如create之类的操作名称。然后,为您将使用的变量命名:
$formBordereau不是表单,它是一个实体,您应该只使用$bordereau。那么,您需要这个实体
BordereauStagiaire吗?我知道这是一个ManyToMany关系,Symfony 和 Doctrine 直接通过实体管理它,你不需要这个第三个实体。Doctrine 是一个 ORM,这意味着您只能使用对象而不是 ID,如果您正确设计关系,您的
Bordereau实体中应该有一个方法addStagiaire,反之亦然。然后您应该使用以下对象调用此方法: