ExtractValue в TYPO3

Я хочу обновить свой сайт, используя доктрину TYPO3. Но в моей команде, где я хочу использовать ExtractValue, и doctrine понимают эти параметры как поле, а не как функцию sql.

Это мой код:

$statement = $queryBuilder
   ->addSelectLiteral(
   )
   ...

   ->where(
        $queryBuilder->expr()->eq('ExtractValue(n.flexform, \'//field[@index = "erasmusStatus"]/value[@index = "vDEF"]\')', 1);
   )

И результат в SQL:

... WHERE (`'ExtractValue(n`.`flexform, \'//field[@index=\"erasmus\"]/value[@index=\"vDEF\"]\')'` = 1)) 

Вы можете видеть, что SQL принимает 'ExtractValue (n' как поле.

Но я хочу :

...WHERE ('ExtractValue(`n`.`flexform`, \'//field[@index=\"erasmus\"]/value[@index=\"vDEF\"]\')' = 1)) 

Вы знаете QueryBuilder или выражение для этого? Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
114
3

Ответы 3

как насчет того, чтобы сделать это строкой?

... 
->where(
    $queryBuilder->expr()
                 ->eq('ExtractValue(`n.flexform`,
                                    //field[@index = "erasmusStatus"]/value[@index = "vDEF"]\')', 
                                    1);
                     )

Это тот же результат

Erwan Villemont 19.12.2018 08:45

а если вставить разделенное имя как хочешь (`n`.`flexform`)?

Bernd Wilke πφ 19.12.2018 09:51

У меня так же ! Я попытался инвертировать ExtractValue (...) и 1, он работает, ExtractValue принимает функцию SQL, но '1' принимает как поле.

Erwan Villemont 19.12.2018 10:55

Ничего страшного, я найду решение

Erwan Villemont 19.12.2018 12:32

Это работает с этим:

... 
->where(
    str_replace('`',"'", $queryBuilder->expr()->eq(1, 'ExtractValue(`n.flexform`,//field[@index = "erasmusStatus"]/value[@index = "vDEF"]\')');
)

Вы можете использовать простую строку в условии where:

->where(
     'ExtractValue(n.flexform, \'//field[@index = "erasmusStatus"]/value[@index = "vDEF"]\') = 1'
   )

Это возможно в других методах, например andX:

    ->where(
        $queryBuilder->expr()->andX(
            'FROM_UNIXTIME(tstamp) = ' . $queryBuilder->quote('2018-12-13 20:34:19'),
            $queryBuilder->expr()->eq('uid', 6)
            )
        )

Другие вопросы по теме