Doctrine在2个字段中搜索全名

时间:2017-07-13 07:32:50

标签: mysql symfony doctrine-orm

我有一个包含firstNamelastName字段的用户实体。如何以任何顺序搜索全名。例如,搜索John Doe' Doe John' John D'并获得相关结果

这是我当前的查询。但我一次只能搜索一列,即得到的结果与' firstName'或者' lastName'。例如,我得到了' John'或者' Doe',但不适用于John Doe'

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

3 个答案:

答案 0 :(得分: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 :(得分:0)

也许尝试创建存储库类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();

答案 2 :(得分:0)

        $qb->where($qb->expr()->andX(
    $qb->expr()->orX(
        $qb->expr()->like(
            $qb->expr()->concat('employee_alias.firstName', $qb->expr()->concat($qb->expr()->literal(' '), 'employee_alias.lastName')),
            $qb->expr()->literal($phrase.'%')
        ),
        $qb->expr()->like(
            $qb->expr()->concat('employee_alias.lastName', $qb->expr()->concat($qb->expr()->literal(' '), 'employee_alias.firstName')),
            $qb->expr()->literal($phrase.'%')
        )
    ))
);