Dctrine DQL-选择列别名添加为新记录

时间:2018-08-10 08:22:35

标签: php symfony doctrine dql

我有一个链接到用户个人资料实体的用户实体。

我需要能够连接用户的名字和姓氏以进行过滤。

这大致就是我的查询的样子:

$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,得到了“。”

执行此操作的正确方法是什么?

谢谢

1 个答案:

答案 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 . '%')