REPLACE funkce v kdyby/doctrine

Petr Jankuj
Člen | 1
+
0
-

Zdravím, mohli byste mi prosím pomoci při jednom dotazu v DQL?
Dotaz vypadá následovně.

	/**
	 * @param string $partOfName
	 * @return array
	 */
	public function userWhisperer($partOfName)
	{
		return $this->em->createQuery("
	  		SELECT u.name, LENGTH(u.name) - LENGTH(replace(u.name, :name, '')) AS pocet
		  	FROM App\Model\Entities\User u
			WHERE u.name LIKE :text
			ORDER BY pocet DESC
		")
			->setMaxResults(5)
			->setParameters(['text' => "%{$partOfName}%", 'name' => $partOfName])
			->getResult();
	}

Problém je v tom, že Doctrine 2 nemá funkci replace, tak jsem ji podle návodu zaregistroval.
Třída vypadá naprosto stejně (S vyjímkou jmenného prostoru). Registrová je následovně.

doctrine:
    user: '...'
    password:
    dbname: '...'
    metadata:
        App: %appDir%
    dql:
        string:
            replace: App\Model\Utils\ReplaceFunction

Avšak při spuštění toho dotazu dostanu chybu.

Doctrine\ORM\Query\QueryException

[Syntax Error] line 0, col 130: Error: Expected '.' or '(', got 'name'

V Tracy mě to odkazuje jedině sem ->
(File: …\orm\lib\Doctrine\ORM\Query\QueryException.php:52)

44:        /**
45:         * @param string          $message
46:         * @param \Exception|null $previous
47:         *
48:         * @return QueryException
49:         */
50:        public static function syntaxError($message, $previous = null)
51:        {
52:            return new self('[Syntax Error] ' . $message, 0, $previous); // zde
53:        }

Mohli byste mi prosím pomoct?
Díky moc!

Editoval Petr Jankuj (25. 9. 2017 16:59)

David Matějka
Moderator | 6445
+
+1
-

ahoj, zkus pouzit nasledujici implementaci (pripadne rovnou celej balicek) https://github.com/…/Replace.php pouziva to ArithmeticPrimary namisto StringPrimary