Ich habe meine benutzerdefinierte DQL Funktion für Lehre DQL:Symfony 2/Doctrine benutzerdefinierte DQL-Funktionen Parameter haben String-Längenbeschränkung?
class Translate extends FunctionNode {
public $field;
public function getSql(SqlWalker $sqlWalker) {
$query = "TRANSLATE(" . $this->field->dispatch($sqlWalker) . ", 'àâäãáåÀÁÂÃÄÅçÇéèêëÉÈÊËîïìíÌÍÎÏñÑôöðòóÒÓÔÕÖùúûüÙÚÛÜýÿÝ', 'AAAAAAAAAAAACCEEEEEEEEIIIIIIIINNOOOOOOOOOOUUUUUUUUYYY')";
return $query;
}
public function parse(Parser $parser) {
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->field = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
Es scheint gut zu funktionieren, wenn es zu benutzen.
Aber wenn der String-Parameter mehr als 307 Zeichen enthält, funktioniert es nicht. Es gibt keinen Fehler, aber das Skript endet.
$query = $this->createQueryBuilder('...');
$query->addSelect("TRANSLATE('less than 307 chars')"); // working
$query->addSelect("TRANSLATE('more than 307 chars')"); // NOT working
Wie kann ich mehr als 307 Zeichen verwenden?
Haben Sie versucht, nur zu laufen mit mehr als 307 Zeichen SQL? Vielleicht ist es ein Problem bei der maximalen Abfragegröße. –
Ja, und es gibt keine Einschränkung. – Seb33300
Und wenn ich meine DQL-Funktion (Translate-Klasse) modifiziere, um meine Zeichenkette direkt zu setzen, funktioniert sie: $ query = "TRANSLATE ('rohe Zeichenkette mit mehr als 307 Zeichen', 'àâäãáåÀÁÄÄÇÇéèêëÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉ" ",' AAAAAAAAAAAACCEEEEEEEEIIIIIIIINNOOOOOOOOOOUUUUUUUUYYY ')"; – Seb33300