gpt4 book ai didi

php - INET_ATON 在 where 语句 doctrine2 querybuilder zend2

转载 作者:行者123 更新时间:2023-12-01 10:01:20 25 4
gpt4 key购买 nike

问题:我想在 Doctrine2 中使用 querybuilder 运行查询,例如:

SELECT * FROM TABLE WHERE `column1` = 'x' and (`column2` = INET_ATON('1.1.1.1') OR `column3` like '%bla%'...)

我应该如何使用 Zend2 在 Doctrine2 中执行此操作?

我试过这个:

$where->add($qb->expr()->eq('column2', $qb->expr()->literal('inet_aton('1.1.1.1'))));

但这行不通。 Doctrine 仍然在 inet_aton 函数周围添加引号。

最佳答案

好吧,我自己想通了:

你应该做的几件事:

先做一个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(:?)

我希望这能帮助其他在 Doctrine 和 Zend Framework2 中具有特殊功能的人

关于php - INET_ATON 在 where 语句 doctrine2 querybuilder zend2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com