Doctrine Query Builder Функции mysql - PullRequest
7 голосов
/ 18 мая 2011

я пытаюсь создать один из моих старых запросов MySQL в Doctrine Query Builder, однако я получаю сообщение об ошибке Ошибка: ожидаемая известная функция, получено 'SEC_TO_TIME'

Так что я угадываю эту доктринуне нравится функция mysql SEC_TO_TIME , но, похоже, ей нравятся AVG , COUNT и тому подобное.Есть ли какой-либо способ отделить форму, используя класс Doctrine_RawSQL, чтобы заставить конструктор запросов выполнить запрос?

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Эти AVG и Count являются агрегатными функциями DQL, они не имеют ничего общего с SQL.Таким образом, нет никакого способа вызвать UDF из DQL, кроме RawSQL

Но, если вы используете doctrine2, вы можете взглянуть на Добавление своих собственных функций в язык DQL и Расширение DQL в Doctrine 2: пользовательские функции .

1 голос
/ 09 января 2019

я знаю, что этот вопрос очень старый, но я отвечаю на этот вопрос для тех, у кого такая же ошибка.
вам просто нужно добавить приведенный ниже код в виде файла с именем "SecToTime.php", как показано ниже.

YourProjectName \ library \ Doctrine \ DoctrineExtensions \ Query \ MySql \ SecToTime.php

И поместите приведенный ниже код в указанный выше файл с именем "SecToTime.php".

<?php

namespace DoctrineExtensions\Query\Mysql;

use Doctrine\ORM\Query\AST\Functions\FunctionNode,
    Doctrine\ORM\Query\Lexer;

class SecToTime extends FunctionNode {

    public $time;

    /**
     * @override
     */
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) {
        return 'SEC_TO_TIME(' . $sqlWalker->walkArithmeticPrimary($this->time) . ')';
    }

    /**
     * @override
     */
    public function parse(\Doctrine\ORM\Query\Parser $parser) {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->time = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

}

вам нужно добавить указанное выше имя файла в ваш файл doctrine.php для дальнейшего использования. Я надеюсь, что вы знаете, как добавить это.

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...