Я хочу обновить свой сайт с использованием доктрины TYPO3.
Но в моей команде, где я хочу использовать ExtractValue, и доктрина понимает эти параметры как поле, а не как функцию 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);
)
Это работа с этим:
...
->where(
str_replace('`',"'", $queryBuilder->expr()->eq(1, 'ExtractValue(`n.flexform`,//field[@index="erasmusStatus"]/value[@index="vDEF"]\')');
)
Вы можете использовать простую строку в условии:
->where(
'ExtractValue(n.flexform, \'//field[@index="erasmusStatus"]/value[@index="vDEF"]\') = 1'
)
Это возможно в других методах, например, и X:
->where(
$queryBuilder->expr()->andX(
'FROM_UNIXTIME(tstamp) = ' . $queryBuilder->quote('2018-12-13 20:34:19'),
$queryBuilder->expr()->eq('uid', 6)
)
)