Как преобразовать 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

Оно работает.

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