REPLACE funkce v kdyby/doctrine
- Petr Jankuj
- Člen | 1
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
ahoj, zkus pouzit nasledujici implementaci (pripadne rovnou celej balicek) https://github.com/…/Replace.php pouziva to ArithmeticPrimary namisto StringPrimary