php – 如何使用Symfony2实现搜索过滤器表单
发布时间:2020-05-31 01:01:13 所属栏目:PHP 来源:互联网
导读:我有一个要在页面上显示的项目列表,上面有一个搜索表单来过滤这些项目,就像在任何通常的后端一样.问题是我不知道如何将搜索条件添加到带有连接的现有查询中…这就是我所拥有的: 我在与实体关联的存储库上使用特定方法来在查询上添加联接(以避免许多查询).控
|
我有一个要在页面上显示的项目列表,上面有一个搜索表单来过滤这些项目,就像在任何通常的后端一样.问题是我不知道如何将搜索条件添加到带有连接的现有查询中…这就是我所拥有的: 我在与实体关联的存储库上使用特定方法来在查询上添加联接(以避免许多查询).控制器看起来像这样: class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('AcmeDemoBundle:Item')->getList();
}
}
存储库上的getList方法如下所示: use DoctrineORMEntityRepository;
// ...
class ItemRepository extends EntityRepository
{
public function getList()
{
$queryBuilder = $this
->createQueryBuilder('i')
->innerJoin('i.brand','b');
return $queryBuilder->getQuery();
}
}
我创建了一个ItemSearchType表单对象,其中包含几个字段来搜索项目. 如何从搜索表单中提供的数据轻松添加搜索条件以显示已过滤的项目? 这是我的控制器中有关搜索表单的内容: class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
if ($request->getMethod() === 'POST') {
$searchForm->bindRequest($request);
if ($searchForm->isValid()) {
$searchCriteria = $searchForm->getData();
// Do something with this data! ...but I don't know how
}
}
}
谢谢! 这是我会尝试的:public function getListBy($criteria)
{
$qb = $this->createQueryBuilder('i');
$qb->innerJoin('i.brand','b');
foreach ($criteria as $field => $value) {
if (!$this->getClassMetadata()->hasField($field)) {
// Make sure we only use existing fields (avoid any injection)
continue;
}
$qb ->andWhere($qb->expr()->eq('i.'.$field,':i_'.$field))
->setParameter('i_'.$field,$value);
}
return $qb->getQuery()->getResult();
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
