pdoResources некорректно фильтрует ресурсы
При выборке через where задаются дополнительные параметры для фильтрации. Но на выходе получаю совсем не те результаты, которые ожидаются.
Пример сниппета с параметрами
Если включить showLog, то сниппет создает следующий запрос
Но на самой странице сниппет выводит все ресурсы.
Если условие меняю на
Из-за чего может быть такое поведение?
{'!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 построенный запрос отрабатывает корректно.Из-за чего может быть такое поведение?
Комментарии: 4
посмотрите здесь, у меня была похожая проблема(пробовал с timestamp и форматом как у вас) с датой.
Спасибо. Если оставить только условие с датой, то работает. Но не пойму, как туда добавить доп условие
"localizator.key" => 'localizator_key' | option
Если делаю так'where' => '["startDate > NOW() AND localizator.key = '~'localizator_key' | option~'"]'
то ругаетсяUnknown column 'ru' in 'where clause'
Не знаю насколько это правильно, но так работает
'where' => '["startDate > NOW() AND localizator.key = \'' ~ ('localizator_key' | option) ~ '\'"]',
Работает -не трогай)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.