2017-07-13 58 views
0

我有一个用户实体firstNamelastName字段。我如何以任何顺序搜索全名。例如搜索“John Doe”,“Doe John”,“John D”并获得相关结果学说搜索全名2字段

这是我当前的查询。但是我一次只能搜索一列,即得到匹配'firstName'或'lastName'的结果。例如,我得到了“约翰”或“李四”,而不是结果“李四”

$likeName = $name.'%'; 
    $qb = $this->createQueryBuilder('user') 
     ->where($qb->expr()->orX(
      $qb->expr()->like('user.firstName', "'$likeName'"), 
      $qb->expr()->like('user.lastName', "'$likeName'") 
    ); 
+0

这是什么意思“我可以一次仅搜索一列”?你能解释一下你想要的结果以及ypu现在得到的结果吗? 请举一个数据的例子 –

+0

@AlessandroMinoccheri这意味着我可以得到匹配枯萎的firsName或lastName的结果,但是当我输入全名时,我什么也没有得到 – julie

回答

0

试试这个:

$likeName = $name.'%'; 
    $qb = $this->createQueryBuilder('user') 
     ->where($qb->expr()->orX(
      $qb->expr()->like($qb->expr()->concat($qb->expr()->concat('user.lastName', ' '), 'user.firstName') 
, "'$likeName'"), 
      $qb->expr()->like($qb->expr()->concat($qb->expr()->concat('user.firstName', ' '), 'user.lastName') 
, "'$likeName'") 
    )); 
1

也许尝试建立仓储类http://symfony.com/doc/current/doctrine/repository.html和像这样的查询:

$this->getEntityManager() 
      ->createQueryBuilder('user') 
      ->andWhere('user.firstName LIKE :firstName') 
      ->andWhere('user.lastName LIKE :lastName') 
      ->setParameter('firstName', $firstName) 
      ->setParameter('lastName', $lastName) 
      ->getQuery() 
      ->getResult();