src/DQL/SumIfWithinLastXHours.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\DQL;
  3. use Doctrine\ORM\Query\AST\Functions\FunctionNode;
  4. use Doctrine\ORM\Query\Lexer;
  5. /**
  6. * @author Cosmin-Romeo TANASE <[email protected]>
  7. */
  8. class SumIfWithinLastXHours extends FunctionNode
  9. {
  10. private $expr = [];
  11. public function parse(\Doctrine\ORM\Query\Parser $parser)
  12. {
  13. $parser->match(Lexer::T_IDENTIFIER);
  14. $parser->match(Lexer::T_OPEN_PARENTHESIS);
  15. $this->date = $parser->ArithmeticFactor();
  16. $parser->match(Lexer::T_COMMA);
  17. $this->intervalExpression = $parser->ArithmeticFactor();
  18. $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  19. }
  20. public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
  21. {
  22. return sprintf(
  23. 'SUM(IF((%s>DATE_SUB(NOW(), INTERVAL %s HOUR)), 1, 0))',
  24. $sqlWalker->walkArithmeticTerm($this->date),
  25. $sqlWalker->walkArithmeticTerm($this->intervalExpression)
  26. );
  27. }
  28. }