Doctrine 2随机选择一行(偏移0或1索引)?

Jie*_*eng 6 dql doctrine-orm

到目前为止,我认为学说没有办法选择随机行.所以我想我有一个查询来获取行数

// pseudo code
$count = SELECT COUNT(i) FROM Item i WHERE ...
Run Code Online (Sandbox Code Playgroud)

然后有一个真正的查询来使用PHP中的随机偏移来获取项目 setFirstResult

$item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingleResult()
Run Code Online (Sandbox Code Playgroud)

问题是,我rand()从0或1开始?那么结束?$count还是$count-1

Ben*_*min 6

setFirstResult() 是基于0的.

按照您的方法,您必须使用:

->setFirstResult(rand(0, $count - 1))->setMaxResults(1)->getSingleResult();
Run Code Online (Sandbox Code Playgroud)

资源:

我同意文件在这一点上不清楚.但是,我们可以看到Doctrine\DBAL\Query\QueryBuilder以这种方式使用它:

->modifyLimitQuery($query, $this->maxResults, $this->firstResult);
Run Code Online (Sandbox Code Playgroud)

然后将其转换为Doctrine\DBAL\Platforms\AbstractPlatform中的SQL:

final public function modifyLimitQuery($query, $limit, $offset = null)
{
    ...
    $query .= ' OFFSET ' . $offset;
Run Code Online (Sandbox Code Playgroud)

OFFSET 在SQL中基于0,我们可以推断出setFirstResult()也是从0开始的.