首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原理2.1 - DAYOFWEEK函数替代?

原理2.1 - DAYOFWEEK函数替代?
EN

Stack Overflow用户
提问于 2012-10-08 03:04:30
回答 2查看 2K关注 0票数 1

在D2.1,querybuilder中,如何使用星期几的mysql函数,我不认为它在

代码语言:javascript
复制
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');
EN

回答 2

Stack Overflow用户

发布于 2016-12-30 06:55:54

您可以编写一个原理扩展来完成这项工作:

Xyz\SomeBundle\DoctrineExtension\DayOfWeek.php

代码语言:javascript
复制
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

代码语言:javascript
复制
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

更多详细信息请查看此处:DoctrineExtensions

票数 1
EN

Stack Overflow用户

发布于 2012-10-08 15:02:40

无法将所有SQL函数与查询构建器一起使用。其中一些是定义的(AVGSUM等),但大多数没有定义(包括DAY/WEEK/MONTH).

您仍然可以编写原生SQL:

代码语言:javascript
复制
// creating doctrines result set mapping obj.
$rsm = new Doctrine\ORM\Query\ResultSetMapping();

// mapping results to the message entity
$rsm->addEntityResult('AppBundle\Entity\Post', 'p');
$rsm->addFieldResult('p', 'id', 'id');
$rsm->addFieldResult('p', 'postDate', 'postDate');

$sql = "SELECT id, postDate
        FROM your_table
        WHERE YEAR(postDate) = ? 
              AND [...]";

$query = $this->_em->createNativeQuery($sql, $rsm);
$query->setParameter(1, $your_year_here);
$query->getResult();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12771882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档