在DQL中使用SHA1的任何方式 [英] Any way of using SHA1 in DQL
本文介绍了在DQL中使用SHA1的任何方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下DQL会生成错误: [语法错误]行0,列42:错误:预期的已知功能,获得'sha1'
使用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
函数。
您的 app / config / config.yml
文件:
$ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
您的 src / YourBundle / DQL / Sha.php
file: / p>
命名空间YourBundle\DQL;
使用Doctrine\ORM\Query\AST\Functions\FunctionNode;
使用Doctrine\ORM\Query\Parser;
使用Doctrine\ORM\Query\SqlWalker;
使用Doctrine\ORM\Query\Lexer;
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 below generates an error:[Syntax Error] line 0, col 42: Error: Expected known function, got '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;
}
解决方案
You need to create your own function which will translate sha1
function.
Your app/config/config.yml
file:
doctrine:
orm:
dql:
string_functions:
sha1: YourBundle\DQL\Sha
Your src/YourBundle/DQL/Sha.php
file:
namespace YourBundle\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Lexer;
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)
. ")";
}
}
Check doc for more info
这篇关于在DQL中使用SHA1的任何方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文