我在 postgresql 上配置了一個 symfony / doctrine 專案,我想得到我表中一個元素的隨機結果。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
<?php
// App/Doctrine/DBAL/FunctionNode/Random.php
namespace App\Doctrine\DBAL\FunctionNode;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
/**
* RandFunction ::= "RANDOM" "(" ")".
*/
final class Random extends FunctionNode
{
public function parse(\Doctrine\ORM\Query\Parser $parser): void
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker): string
{
return 'RANDOM()';
}
}
# config/packages/doctrine.yaml
doctrine:
# ...
orm:
dql:
numeric_functions:
Random: App\Doctrine\DBAL\FunctionNode\Random
使用示例
<?php
// App\Repository\EntityRepository.php
namespace App\Repository;
class EntityRepository extends ServiceEntityRepository
{
// ...
public function getOneRandom()
{
return = $this->createQueryBuilder('alias')
->orderBy('RANDOM()')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult()
;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533880.html
