如何在Doctrine ORM中搜索单词?

4

我希望知道在Doctrine ORM Symfony中是否可以实现以下功能。我有一个产品列表,每个产品都有一个标题。假设它们的标题是:

1. Great Mango
2. Show Mango
3. King Mango

我使用这个Doctrine来找到标题。
$repository->findByTitle("Mango");

但是我什么都没有显示。如果我完整地输入标题来搜索它,比如“King Mango”,那么它会显示,但不是包含"MANGO"一词的列表。
我使用了这个链接作为参考:link。但如果你有更多关于此的文档,我很乐意学习。
2个回答

7

要在where子句中使用like,您需要使用where条件和setParameter。查询如下:

$title = 'Mango';
$query = $repository->createQueryBuilder('a')
           ->where('a.title LIKE :title')
           ->setParameter('title', '%'.$title.'%')
           ->getQuery();

5

魔术方法只能使用精确搜索。要使用LIKE语句,您需要创建自己的存储库,如此处所述:http://symfony.com/doc/current/doctrine/repository.html

一旦您拥有自己的存储库类,就可以创建一个使用LIKE查询的方法:

public function findByTitlePart($title)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT p FROM AppBundle:Product p WHERE p.title LIKE :title'
        )
        ->setParameter('title', '%' . $title . '%')
        ->getResult();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接