我有一个链接到用户个人资料实体的用户实体。
我需要能够连接用户的名字和姓氏以进行过滤。
这大致就是我的查询的样子:
$qb = $this->createQueryBuilder('users');
$qb
->addSelect('users')
->innerJoin('users.profile', 'profile')
->addSelect('profile')
->addSelect('CONCAT(profile.firstName, \' \', profile.lastName) AS fullName')
;
我希望将全名视为用户属性或配置文件,但我会在结果中获得完整的新记录作为全名
[0] => Array (
[id] => 5
[username] => admin
[profile] => Array (
[firstName] => John
[lastName] => Doe
)
),
[fullName] => John Doe
我尝试将列别名为“ users.fullName”,但这给了我一个错误。
[语法错误]行0,列87,错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_FROM,得到了“。”
执行此操作的正确方法是什么?
谢谢
答案 0 :(得分:1)
为什么不通过select方法提供所需列的完整列表:
->select('user.id, user.username, CONCAT(profile.firstName, \' \', profile.lastName) AS fullName')
您应该收到正确的assoc数组。
请记住添加适当的where子句:
->where("CONCAT(profile.firstName, ' ', profile.lastName) LIKE :name")
->setParameter('name', '%' . $name . '%')