Doctrine 条令2.1-周日功能替代方案?

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

在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) = :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
更多详情请点击此处: