我想在Symfony2查询中执行date()
函数,下面是我尝试过的但是它给了我一个错误。
$query=$em->createQueryBuilder()
->select('date(a.created_at), COUNT(date( a.created_at) ) AS count_user')
->from('ContrateAdminBundle:Artist', 'a')
->where("date(a.created_at) BETWEEN '{$fromdateCelebrities}' AND '{$todateCelebrities}'")
->groupBy('date(a.created_at)')
->getQuery();
我还粘贴了查询的输出字符串,我可以直接在MySQL中执行该字符串。
select date(created_at) created_at, count(*) from Artist where date(created_at) BETWEEN '2015-01-05' AND '2015-02-25' group by date(created_at)
答案 0 :(得分:4)
错误是由学说2引起的,它不了解mysql方法date
,你应该手动创建它。
我在Create custom Doctrine 2 Method
上看到了sollution alredy使用以下代码创建名为DateFunction.php的php类:
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;
class DateFunction extends FunctionNode
{
private $arg;
public function getSql(SqlWalker $sqlWalker)
{
return sprintf('DATE(%s)', $this->arg->dispatch($sqlWalker));
}
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arg = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
在$em
注册新方法
$em->getConfiguration()->addCustomDatetimeFunction('DATE', 'DateFunction');
这将注册您的自定义学说方法;