我正在尝试调用实体存储库中创建的函数
public function getBillGroupByDate($dateStart, $dateEnd) {
return $query = $this->createQueryBuilder('d')
->select('count(d) as nb, SUBSTRING(d.created, 1, 10) as bill_date')
->having('DATE(bill_date) BETWEEN :from AND :to')
->groupBy('bill_date')
->orderBy('d.created', 'ASC')
->setParameter('from', $dateStart)
->setParameter('to', $dateEnd)
->getQuery()
->getResult();
}
我正在使用一个柏柏雷捆绑包,他创建了最需要的 DQL 函数来教义。函数日期似乎很好
<?php
namespace DoctrineExtensionsQueryMysql;
use DoctrineORMQueryASTFunctionsFunctionNode;
use DoctrineORMQueryLexer;
/**
* @author Steve Lacey <steve@stevelacey.net>
*/
class Date extends FunctionNode
{
public $date;
public function getSql(DoctrineORMQuerySqlWalker $sqlWalker)
{
return 'DATE(' . $sqlWalker->walkArithmeticPrimary($this->date) . ')';
}
public function parse(DoctrineORMQueryParser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
但是由于我不知道我总是有一个例外的原因,也许是因为列名是别名并且实际上不存在?
HTTP 500 内部服务器错误 注意:未定义的索引:元数据 例外 Symfony\Component\Debug\Exception\ 上下文错误异常 in vendor\doctrine\orm\lib\Doctrine\ORM\Query\SqlWalker.php (第 604 行( * * @return 字符串 */public function walkEntityIdentificationVariable($identVariable( { $class = $this->queryComponents[$identVariable]['metadata']; $tableAlias = $this->getSQLTableAlias($class->getTableName((, $identVariable(; $sqlParts = 数组((; foreach ($this->quoteStrategy->getIdentifierColumnNames($class, $this->platform( as $columnName( { $sqlParts[] = $tableAlias .'.' .$columnName;
问题是你不能使用 berberlei bundle 中的 DATE 函数,因为该函数需要一列,并且你传递的别名 'bill_date' 是一个字符串。您可以创建自己的函数 DATE 来期望一个字符串变量。