Tôi tạo ra chức năng DQL tùy chỉnh của tôi cho Học thuyết DQL:Symfony 2/Doctrine thông số chức năng DQL do người dùng định nghĩa có giới hạn độ dài chuỗi?
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);
}
}
Có vẻ như để làm việc tốt khi sử dụng nó.
Nhưng nếu tham số chuỗi chứa hơn 307 ký tự thì nó không hoạt động. Không có lỗi nhưng tập lệnh kết thúc.
$query = $this->createQueryBuilder('...');
$query->addSelect("TRANSLATE('less than 307 chars')"); // working
$query->addSelect("TRANSLATE('more than 307 chars')"); // NOT working
Tôi có thể sử dụng hơn 307 ký tự bằng cách nào?
Bạn đã cố gắng chạy chỉ SQL với hơn 307 ký tự? Có thể đó là vấn đề trong kích thước truy vấn tối đa. –
Có, và không có giới hạn. – Seb33300
Và nếu tôi sửa đổi hàm DQL của tôi (lớp dịch) để trực tiếp đặt chuỗi của tôi, nó hoạt động: $ query = "TRANSLATE ('chuỗi thô với hơn 307 ký tự làm việc', 'àâäãáåÀÁÂÃÄÅçÇéèêëÉÈÊËîïìûÌÍÎÏñÑôöðòóÒÓÔÕÖùúûüÙÚÛÜýÿÝ', 'AAAAAAAAAAAACCEEEEEEEEIIIIIIIINNOOOOOOOOOOUUUUUUUUYYY')"; – Seb33300