(심포니 3.2.7)교리 내가 저장소 내부에 생성이 쿼리를 가지고 '>'
있어, 렉서 :: T_FROM 예상 :
: 그것은이 DQL을 생성$qb = $this->createQueryBuilder('c');
$qb->select($qb->expr()->gte('c.createdDate', 'CURRENT_TIMESTAMP()').' AS HIDDEN x');
$qb->orderBy('x');
$qb->getQuery()->execute();
SELECT c.createdDate >= CURRENT_TIMESTAMP() AS HIDDEN x
FROM App\CatalogBundle\Entity\Company c
ORDER BY x ASC
또한 ...가 생성되고,이 에러 :
[Syntax Error] line 0, col 21: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '>'
무엇이 잘못 될 수 있습니까? 대답을 @bishop하는
솔루션
덕분에, 나는 사용자 정의 교리 DQL 기능을 만드는 내 문제에 대한 해결책을 만들 수 있었다. 구성 : 여기
doctrine:
orm:
dql:
datetime_functions:
DATES_COMPARE: AppBundle\DQL\DatesCompareFunction
그리고 클래스에 포함 된 언급 한 것입니다 :
use Doctrine\ORM\Query;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class DatesCompareFunction extends FunctionNode
{
/* @var Query\AST\Node */
public $param1;
/* @var Query\AST\Node */
public $param2;
/* @var Query\AST\Node */
public $param3;
/** @inheritdoc */
public function getSql(Query\SqlWalker $sqlWalker)
{
return sprintf(
'CASE (%s %s %s) WHEN 1 THEN 1 ELSE 0 END',
$this->param1->dispatch($sqlWalker),
$this->param2,
$this->param3->dispatch($sqlWalker)
);
}
/** @inheritdoc */
public function parse(Query\Parser $parser): void
{
$parser->match(Query\Lexer::T_IDENTIFIER);
$parser->match(Query\Lexer::T_OPEN_PARENTHESIS);
$this->param1 = $parser->StringPrimary();
$parser->match(Query\Lexer::T_COMMA);
$this->param2 = $parser->ComparisonOperator();
$parser->match(Query\Lexer::T_COMMA);
$this->param3 = $parser->StringPrimary();
$parser->match(Query\Lexer::T_CLOSE_PARENTHESIS);
}
}
그래서 모두가 다음 DQL을 위해 제대로 작동 :
SELECT DATES_COMPARE(c.subscriptionEndDate, >, CURRENT_TIMESTAMP()) AS x
FROM App\CatalogBundle\Entity\Company c
ORDER BY x DESC
감사합니다. 나는 적절한 해결책을 만들 수 있었고 그것을 나의 질문의 내용에 추가했다. –