5
DQL 내에서 MySQL CONV 문자열 함수를 사용할 수 있도록 사용자 정의 DQL 함수를 생성하려고합니다. 내 목표는 16 진수에 저장된 콘텐츠에 대해 비트 검사를 수행 할 수있게하는 것입니다. 이전에 다음과 같은 SQL 쿼리를 수행했습니다.MySQL CONV를 복제하는 사용자 정의 DQL 함수
.... where conv(`myField`,16,10) & 4096 = 4096
그러나 이러한 SQL 쿼리를 DQL 형식으로 변환하려고합니다. 내가 이해할 수없는 것은 '& 4096 = 4096'을 파서로 가져 오는 방법입니다. 나는 다음과 같이 사용하고
namespace Acme\TestBundle\DQL;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class MysqlConv extends FunctionNode
{
public $stringFirst;
public $stringSecond;
public $stringThird;
public $stringFourth;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->stringFirst = $parser->StringPrimary();
$parser->match(Lexer::T_COMMA);
$this->stringSecond = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_COMMA);
$this->stringThird = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'CONV(' .
$this->stringFirst->dispatch($sqlWalker) .
',' . $this->stringSecond->dispatch($sqlWalker) . ',' . $this->stringThird->dispatch($sqlWalker) . ') & 4096';
}
}
:
return $this->getEntityManager()
->createQuery('SELECT c, h FROM AcmeTestBundle:Company c LEFT JOIN c.CompanyAssoc h WHERE CONV(c.myField,16,10) = 4096')
->getResult();
어떤 제안 등 가장에 대한 전환을 DQL하는 SQL을 완료하는 방법에 이것은 지금까지의 내가 얻을 수 있었던 같다 MySQL CONV 기능?