Symfony2是一个具有近似结果的搜索表单

时间:2015-08-14 11:40:14

标签: php forms symfony

我正在尝试制作一个搜索表单...一切正常,但是现在只有搜索特定对象时搜索才有效,并且字母必须与产品名称相同。

表格:

$form = $this->createFormBuilder()
//            ->setAction($this->generateUrl('search'))
            ->add('search', 'text', array(
                'attr' => array(
                    'placeholder' => 'Search for products',
                ),
                'label' => false))
                ->add('submit', 'submit')
            ->getForm();

        if ('POST' === $request->getMethod())
        {
            $form->handleRequest($request);
            $data = $form->get('search')->getData();
                return $this->redirect($this->generateUrl('searching', array('data' => $data)));
            }

我如何找到产品:

$products = $em->getRepository('MpShopBundle:Product')->findProductsBySearch($data);

    public function findProductsBySearch($data)
    {
        $qb = $this->createQueryBuilder('a');
        $qb->where('a.model=:model');
        $qb->SetParameter('model', $data);
        return $qb->getQuery()->getResult();

    }

如果我搜索示例Test1 - 找到了产品。但如果我写测试 - 没有找到产品。

我想要实现的是找到所有在表单中给出字符串的产品。

例如,如果我有3个产品:Test1,Test2,Test3 ......如果我输入Test并提交,我应该找到所有这些产品...而且无论是leters是小写还是大写..如何我能用PHP和Symfony做到吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

$qb->where('a.model LIKE :model')
   ->setParameter('model', '%'.$model.'%');

它会为您提供包含$model的所有内容。如果您只希望结果以model开头,则可以删除第一个%。

希望这有帮助。