Symfony 在DQL中使用SHA1的任何方法
下面的DQL生成错误:Symfony 在DQL中使用SHA1的任何方法,symfony,doctrine-orm,dql,Symfony,Doctrine Orm,Dql,下面的DQL生成错误:[Syntax error]第0行,第42列:错误:预期已知函数,得到'sha1' 有没有使用SHA1的方法 public function findIdByDql($hashId) { $em = $this->getEntityManager(); $query = $em->createQuery('DELETE FROM CarBrandBundle:Brands b WHERE sha1(b.id) = :id')
[Syntax error]第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
文件:
doctrine:
orm:
dql:
string_functions:
sha1: YourBundle\DQL\Sha
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)
. ")";
}
}
您的src/YourBundle/DQL/Sha.php
文件:
doctrine:
orm:
dql:
string_functions:
sha1: YourBundle\DQL\Sha
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)
. ")";
}
}
查看更多信息。