Doctrine 条令2.1-周日功能替代方案?
在D2.1中的querybuilder中,如何使用星期几mysql函数,我认为它在Doctrine 条令2.1-周日功能替代方案?,doctrine,doctrine-orm,Doctrine,Doctrine Orm,在D2.1中的querybuilder中,如何使用星期几mysql函数,我认为它在 doctrine but isnt there a way i could otherwise? $qb->select('p') ->where('YEAR(p.postDate) = :year') ->andWhere('MONTH(p.postDate) = :month') ->andWhere('DAYOFWEEK(p.postDate) = :dayOf
doctrine but isnt there a way i could otherwise?
$qb->select('p')
->where('YEAR(p.postDate) = :year')
->andWhere('MONTH(p.postDate) = :month')
->andWhere('DAYOFWEEK(p.postDate) = :dayOfWeek');
不可能在查询生成器中使用所有SQL函数。其中一些是定义的(
AVG
,SUM
等),但大多数不是(包括日
/周
/月
)
您仍然可以编写本机SQL:
//创建条令结果集映射obj。
$rsm=新条令\ORM\Query\ResultsMapping();
//将结果映射到消息实体
$rsm->addEntityResult('AppBundle\Entity\Post','p');
$rsm->addFieldResult('p','id','id');
$rsm->addFieldResult('p','postDate','postDate');
$sql=“选择id,postDate
从你的桌子上
其中年份(后日期)=?
和[……]”;
$query=$this->\u em->createNativeQuery($sql,$rsm);
$query->setParameter(1,$your\u year\u在此);
$query->getResult();
不可能在查询生成器中使用所有SQL函数。其中一些是定义的(AVG
,SUM
等),但大多数不是(包括日
/周
/月
)
您仍然可以编写本机SQL:
//创建条令结果集映射obj。
$rsm=新条令\ORM\Query\ResultsMapping();
//将结果映射到消息实体
$rsm->addEntityResult('AppBundle\Entity\Post','p');
$rsm->addFieldResult('p','id','id');
$rsm->addFieldResult('p','postDate','postDate');
$sql=“选择id,postDate
从你的桌子上
其中年份(后日期)=?
和[……]”;
$query=$this->\u em->createNativeQuery($sql,$rsm);
$query->setParameter(1,$your\u year\u在此);
$query->getResult();
您可以编写一个条令扩展来完成这项工作:
Xyz\SomeBundle\DoctrineExtension\DayOfWeek.php
class DayOfWeek extends FunctionNode
{
public $date;
/**
* @override
*/
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "DAYOFWEEK(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
}
/**
* @override
*/
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
app/config/config.yml
doctrine:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
dql:
datetime_functions:
dayofweek: Xyz\SomeBundle\DoctrineExtension\DayOfWeek
更多详细信息请查看此处:您可以编写一个条令扩展来完成此工作: Xyz\SomeBundle\DoctrineExtension\DayOfWeek.php
class DayOfWeek extends FunctionNode
{
public $date;
/**
* @override
*/
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "DAYOFWEEK(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
}
/**
* @override
*/
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
app/config/config.yml
doctrine:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
dql:
datetime_functions:
dayofweek: Xyz\SomeBundle\DoctrineExtension\DayOfWeek
更多详情请点击此处: