admin

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

sql

我正在尝试获取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.by替换c0_.0在列后缀a ?


阅读 147

收藏
2021-06-07

共1个答案

admin

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

然后,您尝试读取userId列,但您传递了companyId列。因此,请替换为:

$latestId = $result['userId'];

有了这个:

$latestId = $result[$column];

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

2021-06-07