为什么Doctrine QueryBuilder会破坏我的查询?

时间:2013-08-05 08:48:53

标签: sql doctrine-orm

我正在尝试在表格中收到最新的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后缀添加到列中?

1 个答案:

答案 0 :(得分:1)

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

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

$latestId = $result['userId'];

用这个:

$latestId = $result[$column];

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