如何从 Doctrine sql 查询中映射列名?

Posted

技术标签:

【中文标题】如何从 Doctrine sql 查询中映射列名?【英文标题】:How is it possible to map column names from a Doctrine sql query? 【发布时间】:2021-08-11 07:22:36 【问题描述】:

我用这样的查询生成器创建了一个查询:

$qb = $em->createQueryBuilder();
$qb->select(['u.id', 'u.name'])
   ->from(User::class, 'u')
   ->where('u.active = 1')
;
$sql = $qb->getQuery()->getSql();

结果如下:

SELECT u1_.user_id as s1, u1_.full_name as s2 FROM users u1_ WHERE u1_.is_active = 1

我想将其作为本机查询执行,但我必须找出如何将 s1, s2 映射到 id, name

【问题讨论】:

【参考方案1】:

你必须在你的选择中使用as

使用您的示例 =>

$qb = $em->createQueryBuilder();
$qb->select(['u.id as s1', 'u.name as s2'])
   ->from(User::class, 'u')
   ->where('u.active = 1');
$sql = $qb->getQuery()->getSql();

这会将 id 映射到 s1 并命名为 s2

【讨论】:

【参考方案2】:

不确定我是否理解您的问题,但如果您想在结果中使用列 idname 运行本机查询,您可以在查询中替换它们,它们是别名,因此它们可以是任何你想要的:

SELECT u.user_id as id, u.full_name as name FROM users u WHERE u.is_active = 1

【讨论】:

以上是关于如何从 Doctrine sql 查询中映射列名?的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis高级

如何从sql查询中提取表名和列名?

SQL 从包含表名、列名和值列映射的数据表中将数据插入到多个表中,可以在源中更改

Doctrine 2.0 结果集映射使用不正确?

Doctrine 仅从本机查询中水合物单行

Doctrine Orm 2 使用本机 SQL 的递归查询