К содержанию

Pdoresource неправильно обрабатывает условие where. РЕШЕНО!

Всем привет!
Сразу к делу. Код сниппета:

<?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 включительно отдают пустой результат.
Денис
Денис
07 апреля 2021, 22:23
modx.pro
1 632
Реклама

Комментарии: 11

Артур Шевченко
07 апреля 2021, 22:33
Lo это строка?
Артур Шевченко
07 апреля 2021, 23:32
Тогда попробуй не переводить в json
    Денис
    Денис Старожил
    07 апреля 2021, 23:34
    Убрал строку
    'return' => 'json'
    Ничего не изменилось, поведение то же.
      Артур Шевченко
      07 апреля 2021, 23:35
      Вот это убери $modx->toJSON($where);
        Денис
        Денис Старожил
        07 апреля 2021, 23:37
        Убрал. То же поведение.
    Роман
    Роман Старожил
    08 апреля 2021, 09:27
    Добавь showLog и посмотри, какой запрос у тебя отправляется в базу.
    Проблема в том, что в TV-ки хранятся, как строки, поэтому ничего и не ищет. Лучше добавьте свое поле и по нему уже делайте выборку.
      Наумов Алексей
      Наумов Алексей Администратор
      08 апреля 2021, 09:59
      CAST вам нужно в where использовать, tv это ж строка, а не число
        Денис
        Денис Старожил
        08 апреля 2021, 10:21
        Подскажите, пожалуйста, а как 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;
          Роман
          Роман Старожил
          08 апреля 2021, 14:11
          Тоже хотел вам предложить через BETWEEN, но не был уверен, что сработает.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        11