Хорошо, я понял это сам:
Несколько вещей, которые вы должны сделать:
Сначала создадим функцию DQL
<?php
namespace Application\DQL;
use Doctrine\ORM\Query\Lexer;
class InetAtonFunction extends \Doctrine\ORM\Query\AST\Functions\FunctionNode
{
public $valueExpression = null;
/**
* parse
*
* @param \Doctrine\ORM\Query\Parser $parser
* @access public
* @return void
*/
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->valueExpression = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
/**
* getSql
*
* @param \Doctrine\ORM\Query\SqlWalker $sqlWalker
* @access public
* @return string
*/
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'INET_ATON('. $this->valueExpression->dispatch($sqlWalker) . ')';
}
}
После этого добавьте функцию в Doctrine ORM
<?php
namespace Observer;
//...
class Module implements
AutoloaderProviderInterface,
ConfigProviderInterface,
ServiceProviderInterface
{
//...
public function onBootstrap($e)
{
$application = $e->getParam('application');
$sm = $application->getServiceManager();
$em = $application->getEventManager();
$entityManager = $sm->get('doctrine.entitymanager.orm_default');
$entityManager->getConfiguration()->addCustomStringFunction('inet_aton', 'Application\DQL\InetAtonFunction');
}
...
После этого ваш хорошо идти. Теперь вы можете выполнять запросы с QueryBuilder как
SELECT whatever FROM someting where cloumn = inet_aton(:?)
Я надеюсь, что это помогает другим с особой функцией в Учении и Zend Framework2
Помогает ли это -> https://groups.google.com/forum/?fromgroups=#!topic/doctrine-user/gdCG5MoByD4 – Crisp
Возможный дубликат http://stackoverflow.com/questions/15623257/doctrine- 2-DQL-MySQL-эквивалентно-к-раунд – Ocramius