好吧,我想通了自己:
你應該做的幾件事:
首先做一個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) . ')';
}
}
後,該功能添加到學說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 2013-03-25 16:04:19
可能的重複http://stackoverflow.com/questions/15623257/doctrine- 2- DQL MySQL的當量至圓 – Ocramius 2013-03-26 06:07:58