【问题标题】:Why does Doctrine QueryBuilder destroy my query?为什么 Doctrine QueryBuilder 会破坏我的查询?
【发布时间】:2013-08-05 08:48:53
【问题描述】:

我正在尝试在表格中接收最新的id。因此,我创建了一个静态类,以便能够从任何所需的表中获取最新的id

public static function getLatestId($entityManager, $table, $column) {
    $qb = $entityManager->createQueryBuilder();
    $qb->select('t.'.$column)->from($table, 't')
       ->orderBy('t.'.$column, 'DESC')->setMaxResults(1);
    $query = $qb->getQuery();
    $result = $query->getSingleResult();
    $latestId = $result[$column];
    return $latestId;
}

当我调用函数时,例如使用getLatestId($em, 'company', 'companyId') 并检查查询(使用getQuery(),它会创建奇怪的语句:

SELECT c0_.companyId AS companyId0 FROM company c0_
ORDER BY c0_.companyId DESC LIMIT 1

为什么将t. 替换为c0_. 并在列中添加0 后缀?

【问题讨论】:

  • 也许在 select 子句中使用参数是可能的,至少如果在 Stack Overflow 上查看 another question 看起来是这样的。但我不明白为什么它在我的情况下不起作用。

标签: sql doctrine-orm


【解决方案1】:

首先,您要检索一个部分,默认情况下它将返回一个标量变量。因此,为了清楚起见,最好使用 getSingleScalarResult() 方法。另见:http://docs.doctrine-project.org/en/latest/reference/partial-objects.html

然后您尝试读取 userId 列,但您传递了 companyId 列。所以替换这个:

$latestId = $result['userId'];

用这个:

$latestId = $result[$column];

不要担心 Doctrine 为您的列提供的别名。这是正常行为,它有助于 Doctrine 在内部以正确的方式映射所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2013-06-25
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多