pdoResources некорректно фильтрует ресурсы

При выборке через where задаются дополнительные параметры для фильтрации. Но на выходе получаю совсем не те результаты, которые ожидаются.
Пример сниппета с параметрами
{'!pdoResources' | snippet : [
        'depth' => 0,
    	'includeTVs' => 'previewImg,startDate,endDate',
    	'tpl' => 'wia.evListNew',
    	'sortby' => '{"startDate":"DESC"}',
    	'limit' => '0',
    	'leftJoin' => '{
    		"localizator" : {
    			"class" : "localizatorContent",
    			"alias" : "localizator",
    			"on" : "localizator.resource_id = modResource.id"
    		}
    	}',
    	'showLog' => '1',
    	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
            'where' => [
                "localizator.key" => 'localizator_key' | option,
                "startDate:>" => "[[!now]]"
            ] 
    ]}
Сниппет
[[!now]]
выводит дату в формате MySQL DATETIME

Если включить showLog, то сниппет создает следующий запрос
SELECT modResource.*, localizator.*, modResource.id, IFNULL(`TVenddate`.`value`, '') AS `tv.endDate`, IFNULL(`TVpreviewimg`.`value`, '') AS `tv.previewImg`, IFNULL(`TVstartdate`.`value`, '') AS `tv.startDate` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_localizator_content` `localizator` ON localizator.resource_id = modResource.id LEFT JOIN `modx_site_tmplvar_contentvalues` `TVenddate` ON `TVenddate`.`contentid` = `modResource`.`id` AND `TVenddate`.`tmplvarid` = 23 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVpreviewimg` ON `TVpreviewimg`.`contentid` = `modResource`.`id` AND `TVpreviewimg`.`tmplvarid` = 11 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVstartdate` ON `TVstartdate`.`contentid` = `modResource`.`id` AND `TVstartdate`.`tmplvarid` = 22 WHERE  ( `localizator`.`key` = 'ru' AND `TVstartdate`.`value` > '2019-12-22 18:44:16' AND `modResource`.`parent` IN (360) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY CAST(`TVstartdate`.`value` AS DATETIME) DESC
Выполняю этот запрос в phpMyAdmin и получаю нужный результат. Один ресурс с датой startDate в будущем.
Но на самой странице сниппет выводит все ресурсы.
Если условие меняю на
"startDate:<" => "[[!now]]"
То не выводит вообще ничего. Хотя должен вывести все ресурсы, кроме одного. И при выполнении запроса в phpMyAdmin построенный запрос отрабатывает корректно.
Из-за чего может быть такое поведение?
Алексей П
22 декабря 2019, 18:55
modx.pro
746
0

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

Антон Тарасов
22 декабря 2019, 19:20
0
посмотрите здесь, у меня была похожая проблема(пробовал с timestamp и форматом как у вас) с датой.
    Алексей П
    22 декабря 2019, 19:31
    0
    Спасибо. Если оставить только условие с датой, то работает. Но не пойму, как туда добавить доп условие
    "localizator.key" => 'localizator_key' | option
    Если делаю так
    'where' => '["startDate > NOW() AND localizator.key = '~'localizator_key' | option~'"]'
    то ругается
    Unknown column 'ru' in 'where clause'
      Алексей П
      22 декабря 2019, 20:00
      0
      Не знаю насколько это правильно, но так работает
      'where' => '["startDate > NOW() AND localizator.key = \'' ~ ('localizator_key' | option) ~ '\'"]',
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
4