2017-07-13 91 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();