Я хочу обновить свой сайт, используя доктрину 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 или выражение для этого? Спасибо






как насчет того, чтобы сделать это строкой?
...
->where(
$queryBuilder->expr()
->eq('ExtractValue(`n.flexform`,
//field[@index = "erasmusStatus"]/value[@index = "vDEF"]\')',
1);
)
а если вставить разделенное имя как хочешь (`n`.`flexform`)?
У меня так же ! Я попытался инвертировать ExtractValue (...) и 1, он работает, ExtractValue принимает функцию SQL, но '1' принимает как поле.
Ничего страшного, я найду решение
Это работает с этим:
...
->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)
)
)
Это тот же результат