我正在尝试在表格中收到最新的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
后缀添加到列中?
答案 0 :(得分:1)
首先,您要检索部分,默认情况下将返回标量变量。因此,为了清楚起见,最好使用getSingleScalarResult()方法。另见:http://docs.doctrine-project.org/en/latest/reference/partial-objects.html
然后您尝试读取userId列,但是您传递了companyId列。所以替换这个:
$latestId = $result['userId'];
用这个:
$latestId = $result[$column];
不要担心Doctrine为您的列提供的别名。这是正常行为,它有助于Doctrine以正确的方式在内部映射所有内容。