Как преобразовать SQL, где условие LENGTH() в xPDO?
Как мне выразить предложение where в этом:
select * from TABLE where LENGTH(COLUMN) > 0
в xPDO?
$criteria->where(array('LENGTH(customer_po_num):>' => '0'));
не работает, это приводит к чему-то вроде этого:
`InventoryData`.`LENGTH(customer_po_num)` > '0'
2 ответа
Решение
Я закончил делать это так:
$criteria->where(
array('`InventoryData`.`id` NOT IN (SELECT id FROM modx_gssi_inventory_data where LENGTH(customer_po_num) > 0)'));
Не уверен, что это самый хороший способ сделать это, но это работает.
Для неподдерживаемых операторов SQL вы обычно можете принудительно ввести условие в запрос, включив его в виде строки, а не массива:
$criteria->where('LENGTH(customer_po_num) > 0');
Изменить: рабочий пример, представленный ниже
$c = $modx->newQuery('modResource');
$c->where('LENGTH(pagetitle) > 0');
$c->select('pagetitle');
$c->prepare();
print_r($c->toSql());
Возвращает следующий (рабочий) SQL:
SELECT `pagetitle`
FROM `ovo_site_content`
AS `modResource`
WHERE LENGTH(pagetitle) > 0
Оно работает.