. */ declare(strict_types=1); namespace App\Doctrine\Functions; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\AST\Node; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\SqlWalker; use Doctrine\ORM\Query\TokenType; class ArrayPosition extends FunctionNode { private ?Node $array = null; private ?Node $field = null; public function parse(Parser $parser): void { $parser->match(TokenType::T_IDENTIFIER); $parser->match(TokenType::T_OPEN_PARENTHESIS); $this->array = $parser->InParameter(); $parser->match(TokenType::T_COMMA); $this->field = $parser->ArithmeticPrimary(); $parser->match(TokenType::T_CLOSE_PARENTHESIS); } public function getSql(SqlWalker $sqlWalker): string { return 'ARRAY_POSITION(' . $this->array->dispatch($sqlWalker) . ', ' . $this->field->dispatch($sqlWalker) . ')'; } }