Pdoresource неправильно обрабатывает условие where. РЕШЕНО!
Всем привет!
Сразу к делу. Код сниппета:
Не понимаю, что за магия происходит. Помогите разобраться.
UPD. Когда ввожу 0, 1, 11, 12 и выборка работает нормально. Остальные числа до 99 включительно отдают пустой результат.
Сразу к делу. Код сниппета:
<?php
$where = array(
'Lo:>=' => 100,
'Lo:<=' => 140,
);
$where = $modx->toJSON($where);
$output = $modx->runSnippet('pdoResources',array(
'limit' => 15,
'parents' => 71,
'includeTVs' => 'Lo',
'where' => $where,
'return' => 'json'
));
return $output;
Данный сниппет выдает результат из 4 значений, то есть работает корректно. Когда меняю 100 на 99, результатом сниппета становится пустой массив. Что интересно, когда меняю 99 на 10, сниппет отрабатывает правильно.Не понимаю, что за магия происходит. Помогите разобраться.
UPD. Когда ввожу 0, 1, 11, 12 и выборка работает нормально. Остальные числа до 99 включительно отдают пустой результат.
Комментарии: 11
Lo это строка?
тип ввода — число
Тогда попробуй не переводить в json
Убрал строку
'return' => 'json'
Ничего не изменилось, поведение то же.
Вот это убери $modx->toJSON($where);
Убрал. То же поведение.
Добавь showLog и посмотри, какой запрос у тебя отправляется в базу.
Проблема в том, что в TV-ки хранятся, как строки, поэтому ничего и не ищет. Лучше добавьте свое поле и по нему уже делайте выборку.
Проблема в том, что в TV-ки хранятся, как строки, поэтому ничего и не ищет. Лучше добавьте свое поле и по нему уже делайте выборку.
CAST вам нужно в where использовать, tv это ж строка, а не число
Подскажите, пожалуйста, а как cast используется в where?
Я решил проблему но другим способом:
Я решил проблему но другим способом:
$where = array(
"0" => "Lo BETWEEN 99 AND 140",
);
$output = $modx->runSnippet('pdoResources',array(
'limit' => 15,
'parents' => 71,
'includeTVs' => 'Lo',
'where' => $where,
'return' => 'json'
));
return $output;
Тоже хотел вам предложить через BETWEEN, но не был уверен, что сработает.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.