在 DQL 中使用 SHA1 的任何方式 [英] Any way of using SHA1 in DQL
本文介绍了在 DQL 中使用 SHA1 的任何方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面的 DQL 生成错误:[Syntax Error] line 0, col 42: Error: Expected known function, got 'sha1'
DQL below generates an error:[Syntax Error] line 0, col 42: Error: Expected known function, got 'sha1'
任何使用 SHA1 的方法?
Any way of using SHA1?
public function findIdByDql($hashId)
{
$em = $this->getEntityManager();
$query = $em->createQuery('DELETE FROM CarBrandBundle:Brands b WHERE sha1(b.id) = :id')
->setParameter('id', $hashId)
->execute();
return;
}
推荐答案
您需要创建自己的函数来翻译 sha1
函数.
You need to create your own function which will translate sha1
function.
您的app/config/config.yml
文件:
doctrine:
orm:
dql:
string_functions:
sha1: YourBundleDQLSha
您的src/YourBundle/DQL/Sha.php
文件:
namespace YourBundleDQL;
use DoctrineORMQueryASTFunctionsFunctionNode;
use DoctrineORMQueryParser;
use DoctrineORMQuerySqlWalker;
use DoctrineORMQueryLexer;
class Sha extends FunctionNode
{
public $valueToSha = null;
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->valueToSha = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(SqlWalker $sqlWalker)
{
return
"sha1("
. $this->valueToSha->dispatch($sqlWalker)
. ")";
}
}
查看doc了解更多信息
这篇关于在 DQL 中使用 SHA1 的任何方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文