是否可以添加到现有的 Doctrine 查询中?
Is it possible to add on to an existing Doctrine Query?
我在 Symfony 中构建了一个页面,它利用 Doctrine 查询生成器来 return 结果。该页面还集成了搜索功能。该页面目前运行良好,但我想知道我的代码的 Doctrine Query Builder 部分是否可以重构?
所以我的问题是,而不是复制和粘贴相同的查询(正如我在下面的代码($results)中所做的那样)并向查询构建器,是否可以将附加选项附加到第一个查询,这样我就不必重新使用代码?
$em = $this->getDoctrine()->getManager('managerName');
$results = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name')
->getQuery()
->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$em = $this->getDoctrine()->getManager('managerName');
$results = $em->createQueryBuilder()
->select('d.name', 'd.createdAt')
->from('ManagerName:Demo', 'd')
->where('d.name LIKE :searchTerm')
->orderBy('d.name')
->setParameter('searchTerm', '%' . $search->getSearch() . '%')
->getQuery()
->getResult();
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
因此,我正在寻找 for/trying 的示例如下所示:
$em = $this->getDoctrine()->getManager('managerName');
$query = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name')
->getQuery();
$results = $query->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$em = $this->getDoctrine()->getManager('managerName');
$results = $query->where('d.name LIKE :searchTerm')
->setParameter('searchTerm', '%' . $search->getSearch() . '%');
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
我不知道是否可以扩展我之前构建的查询,而且连续数小时谷歌搜索似乎return 没有任何有用的资源可供我参考。
我还查看了大量 Doctrine 文档,包括以下内容但没有成功:http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html
提前致谢
在这种情况下,您只需要在执行请求时调用getQuery()
:
$em = $this->getDoctrine()->getManager('managerName');
$query = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name');
$results = $query
->getQuery()
->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$results = $query->where('d.name LIKE :searchTerm')
->setParameter('searchTerm', '%' . $search->getSearch() . '%')
->getQuery()
->getResult();
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
$query
是 \Doctrine\ORM\QueryBuilder
的实例,您可以在此对象上调用 where()
等。
然后你需要调用$query->getQuery()->getResult();
来执行查询。
请注意,我还删除了这条重复的行:
$em = $this->getDoctrine()->getManager('managerName');
当然可以。如果您将 querybuilder 对象分开,这是相当微不足道的。
$qb = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name');
$query = $qb->getQuery();
我在 Symfony 中构建了一个页面,它利用 Doctrine 查询生成器来 return 结果。该页面还集成了搜索功能。该页面目前运行良好,但我想知道我的代码的 Doctrine Query Builder 部分是否可以重构?
所以我的问题是,而不是复制和粘贴相同的查询(正如我在下面的代码($results)中所做的那样)并向查询构建器,是否可以将附加选项附加到第一个查询,这样我就不必重新使用代码?
$em = $this->getDoctrine()->getManager('managerName');
$results = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name')
->getQuery()
->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$em = $this->getDoctrine()->getManager('managerName');
$results = $em->createQueryBuilder()
->select('d.name', 'd.createdAt')
->from('ManagerName:Demo', 'd')
->where('d.name LIKE :searchTerm')
->orderBy('d.name')
->setParameter('searchTerm', '%' . $search->getSearch() . '%')
->getQuery()
->getResult();
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
因此,我正在寻找 for/trying 的示例如下所示:
$em = $this->getDoctrine()->getManager('managerName');
$query = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name')
->getQuery();
$results = $query->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$em = $this->getDoctrine()->getManager('managerName');
$results = $query->where('d.name LIKE :searchTerm')
->setParameter('searchTerm', '%' . $search->getSearch() . '%');
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
我不知道是否可以扩展我之前构建的查询,而且连续数小时谷歌搜索似乎return 没有任何有用的资源可供我参考。
我还查看了大量 Doctrine 文档,包括以下内容但没有成功:http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html
提前致谢
在这种情况下,您只需要在执行请求时调用getQuery()
:
$em = $this->getDoctrine()->getManager('managerName');
$query = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name');
$results = $query
->getQuery()
->getResult();
if ($form->isSubmitted() && $form->isValid()) {
if (isset($_POST['submit'])) {
$results = $query->where('d.name LIKE :searchTerm')
->setParameter('searchTerm', '%' . $search->getSearch() . '%')
->getQuery()
->getResult();
return $this->render('AcmeBundleName:Demo:index.html.twig', [
"form" => $form->createView(),
"results" => $results,
"search" => $search->getSearch(),
]);
}
return $this->redirect($request->getUri());
}
$query
是 \Doctrine\ORM\QueryBuilder
的实例,您可以在此对象上调用 where()
等。
然后你需要调用$query->getQuery()->getResult();
来执行查询。
请注意,我还删除了这条重复的行:
$em = $this->getDoctrine()->getManager('managerName');
当然可以。如果您将 querybuilder 对象分开,这是相当微不足道的。
$qb = $em->createQueryBuilder()
->select('d.name','d.createdAt')
->from('ManagerName:Demo', 'd')
->orderBy('d.name');
$query = $qb->getQuery();