2

我正在尝试接收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;
}

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

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

为什么它替换列的t.byc0_.和后缀 a 0

4

1 回答 1

1

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

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

$latestId = $result['userId'];

有了这个:

$latestId = $result[$column];

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

于 2013-08-05T10:11:55.217 回答