2017-07-13 24 views
0

私はfirstNamelastNameフィールドのUserエンティティを持っています。どのようにしてフルネームを任意の順序で検索できますか?たとえば、「John Doe」、「Doe John」、「John D」などの検索結果を表示します。Doctrineは2つのフィールドでフルネームを検索します

ここは私の現在の質問です。しかし、一度に1つの列だけを検索することができます。つまり、「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

"一度に1つの列でのみ検索できます"という意味はどうですか?あなたは、あなたが望む結果と、今、どのような結果が得られたのか、よく説明できますか? データのほんの少しの例を作ってください –

+0

@AlessandroMinoccheriこれは、firsNameまたはlastNameが枯れている検索結果を得ることができますが、フルネームを入力すると何も得られません – julie

答えて

0

はこの試みない:たぶんリポジトリクラスhttp://symfony.com/doc/current/doctrine/repository.htmlと、このクエリのようなものを作成してみてください

$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

を:

$this->getEntityManager() 
      ->createQueryBuilder('user') 
      ->andWhere('user.firstName LIKE :firstName') 
      ->andWhere('user.lastName LIKE :lastName') 
      ->setParameter('firstName', $firstName) 
      ->setParameter('lastName', $lastName) 
      ->getQuery() 
      ->getResult(); 
関連する問題