我有一个包含firstName
和lastName
字段的用户实体。如何以任何顺序搜索全名。例如,搜索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'")
);
答案 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.'%')
)
))
);