update getrepository getdoctrine generate force delete create php symfony doctrine2 doctrine dql

php - getrepository - El parámetro de funciones DQL Symfony 2/Doctrine definido por el usuario ¿tiene límite de longitud de cadena?



symfony doctrine (1)

Creé mi función DQL personalizada para Doctrine DQL:

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); } }

Parece funcionar bien cuando se usa.

Pero si el parámetro de cadena contiene más de 307 caracteres, no está funcionando. No hay error, pero el script está terminando.

$query = $this->createQueryBuilder(''...''); $query->addSelect("TRANSLATE(''less than 307 chars'')"); // working $query->addSelect("TRANSLATE(''more than 307 chars'')"); // NOT working

¿Cómo puedo usar más de 307 caracteres?


Al igual que wrikken ya lo había explicado, la transliteración debe hacerse usando iconv, ya que eso guardará los recursos de su servidor.

aquí hay una función simple que transliterará (convertir caracteres no latinos a sus representaciones más cercanas en caracteres latinos) una cadena.

function transliterateString($str) { $serverLocale = setlocale(LC_CTYPE, 0); setlocale(LC_CTYPE, ''en_US.UTF8''); // transliterate the string using iconv $str = iconv(''UTF-8'', ''ASCII//TRANSLIT//IGNORE'', $str); setlocale(LC_CTYPE, $serverLocale); // return the locale to what it was before return $str; }

Uso:

$string = "café"; echo $string; echo transliterateString($string);

Arriba se mostrará el siguiente:

café cafe