我想加载所有要在'Payment'(Bordereaus)中支付的'Interns'(Stagiaires)。我想通过选择日期间隔并通过它们传递Interns的属性来选择仅在日期间隔中实习结束的实习生。
'Interns'和'Payment'没有关系,但有一个表'Interns_Payment'(Bordereau_stagiaire)链接到这两个表。我想通过存储库来完成它,然后在PaymentController的“编辑”中加载它。我是新来的symfnony
我在我的支付(Bordereau)存储库中编写了此查询
public function findByDate(Bordereau $bordereau){
$query = $this->createQueryBuilder('bo');
return $query->select('bo', 'bord_stag', 'st')
->leftJoin('bo.bordereauStagiaire', 'bord_stag')
->leftJoin('bord_stag.stagiaire', 'st')
->andWhere('st.finStage >= IN(:dateDebut)')
->andWhere('st.finStage <= IN(:dateFin)')
->andWhere('st.isDeleted = IN(:delete)')
->setParameter('delete', false)
->setParameter('dateFin', $bordereau->dateFin)
->setParameter('dateDebut', $bordereau->dateDebut)
->getQuery()
->getResult()
;
}
这是我的支付(Bordereau)编辑功能在我的控制器
#[Route('/{id}/edit', name: 'app_bordereau_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepo): Response
{
$formBordereau = $this->createForm(BordereauEditType::class, $bordereau);
$formBordereau->handleRequest($request);
if ($formBordereau->isSubmitted() && $formBordereau->isValid()) {
$bordereauRepo->save($bordereau, true);
dd($bordereau);
return $this->redirectToRoute('app_bordereau_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('bordereau/edit.html.twig', [
'bordereau' => $bordereau,
'form' => $formBordereau,
]);
}
我本来希望通过检查dd($bordereauRepository);
得到结果,但我得到了这个结果。
我已经搜索了类似的问题,关于查询中的参数太少,但无法成功找到解决方案。
编辑
我添加了dateDebut和dateFin的setParamaters。但我无法进入。
我是否应该创建一个自定义形式的bordereau?
EDIT2
这是我的新DQL函数
public function findByDate(BordereauEditModel $bordereau, bool $isDeleted = false){
$query = $this->createQueryBuilder('bo');
$query
->select('bo', 'bord_stag', 'st')
->leftJoin('bo.bordereauStagiaire', 'bord_stag')
->leftJoin('bord_stag.stagiaire', 'st')
->andWhere('st.isDeleted = :delete')
->setParameter('delete', $isDeleted);
if ($bordereau->dateDebut) {
$query->andWhere('st.finStage <= :dateDebut')
->setParameter('dateDebut', $bordereau->dateDebut->format('Y-m-d'));
}
if ($bordereau->dateFin) {
$query->andWhere('st.finStage <= :dateFin')
->setParameter('dateFin', $bordereau->dateFin->format('Y-m-d'));
}
$query
->getQuery()
->getResult()
;
}
它打印结果和我设置的静态参数。但对于动态的,它不是。
我还创建了一个模型BordereauEditModel
和一个自定义表单从BordereauEditType
这是我在BordereauController
中的edit
函数
#[Route('/{id}/edit', name: 'app_bordereau_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepository, BordereauEditModel $bordereauEdit): Response
{
$bordereauEdit = new BordereauEditModel();
$formBordereau = $this->createForm(BordereauEditType::class, $bordereauEdit);
$formBordereau->handleRequest($request);
if ($formBordereau->isSubmitted() && $formBordereau->isValid()) {
$bordereauRepository->findByDate($bordereauEdit);
$bordereauRepository->save($bordereau, true);
dd($bordereauRepository);
return $this->redirectToRoute('app_bordereau_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('bordereau/edit.html.twig', [
'bordereau' => $bordereau,
'form' => $formBordereau,
]);
}
当我试图加载动态的,它说'调用一个成员函数格式()对null'。我不知道这是不是另一个问题,我应该把它从这里删除(即作为一个段落在主要职位,使人们不会感到困惑)
在null -> Solved上调用成员函数format()
1条答案
按热度按时间fdbelqdn1#
从条件中取出
IN
。如果要使用IN
进行检查,则不能使用比较运算符。