首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理论扩展

理论扩展
EN

Stack Overflow用户
提问于 2014-02-15 06:13:39
回答 1查看 263关注 0票数 0

我创建了名为DATESTRING的理论扩展,但我遇到了错误。

代码语言:javascript
复制
  "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%M ))"

MonthStringFunction.php

代码语言:javascript
复制
    use Doctrine\ORM\Query\AST\Functions\FunctionNode;
    use Doctrine\ORM\Query\Lexer;
    use Doctrine\ORM\Query\SqlWalker;
    use Doctrine\ORM\Query\Parser;

    /**
     * "MONTHSTRING" "(" SimpleArithmeticExpression ")"
     *
     * @category    DoctrineExtensions
     */
    class MonthStringFunction extends FunctionNode
    {
        public $date;

        /**
         * @override
         */
        public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
        {
            return "MONTHSTRING(DATE_FORMAT(" . $sqlWalker->walkArithmeticPrimary($this->date) . ", %M ))"; //**here some error**
        }

        /**
         * @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);
        }
    }

TestRepository.php

代码语言:javascript
复制
$qb = $this->createQueryBuilder('tst');
    $qb->select('MONTHSTRING(tst.joinDate) as month_string');
    $data = $qb->getQuery()->getArrayResult();
    return $data;
EN

回答 1

Stack Overflow用户

发布于 2014-02-15 10:56:25

DATE_FORMAT函数的format参数需要用引号括起来,因为它是一个字符串。试试这个:

代码语言:javascript
复制
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
    return "MONTHSTRING(DATE_FORMAT(" . $sqlWalker->walkArithmeticPrimary($this->date) . ", '%M' ))"; //**here some error**
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21794106

复制
相关文章

相似问题

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