Комбинированный комплексный фильтр для диапазонов
В Magento 1.7 SOAP APIv2 я ищу способ получить диапазон дат для извлечения информации из SOAP API.
$complexFilter = new filters();
$complexFilter->complex_filter = array(
array(
'key' => 'created_at',
'value' => array('key' => 'from', 'value' => '2012-12-17 00:00:00')
),
array(
'key' => 'created_at',
'value' => array('key' => 'to', 'value' => '2013-01-21 12:02:02')
),
);
Это казалось самым естественным подходом, но используется только последний критерий. Я также пробовал другие комбинации, такие как сложный фильтр сложных фильтров, различные способы их комбинирования, используя gt
и аналогично вместо from
и co. Большинство из этих подходов привели к такому же результату: будет использоваться только последний критерий внутри.
Каков правильный способ получить диапазон дат через API? Можно ли это также сделать с помощью обычного фильтра? Если да, то как объединить дату начала и окончания?
Ответы
Ответ 1
После многопользовательской игры я, наконец, прихожу к некоторому объяснению.
Очевидно, что реализация сложных фильтров не позволяет присутствовать более одного атрибута. Это также то, что я заметил во время моих тестов: только последний атрибут влияет на результат. Поэтому мне нужно найти другой способ сделать то, что я хочу. Как-то грустно видеть, что Magento не предоставляет простой способ сделать это с помощью SOAP API.
Последний подход, который я использовал сейчас, - это определить дату, которая ближе всего к тому, что я хочу. Затем просто перебирайте результаты, которые мне нужны. Таким образом (по крайней мере, с нашими данными о продуктах) я сохраняю нагрузку и результаты до минимума и все еще получаю нужные продукты.
редактировать кажется, что исходная ссылка не работает, и сайт больше не существует. В приведенном выше тексте должно быть достаточно информации. Блог просто показал некоторые примеры кода с ошибочной реализацией.
Ответ 2
Я нашел лучший способ взглянуть на код в Magento!
К счастью, это CASE SENSITIVE, поэтому:
$complexFilter->complex_filter = array(
array(
'key' => 'CREATED_AT',
'value' => array('key' => 'from', 'value' => '2012-12-17 00:00:00')
),
array(
'key' => 'created_at',
'value' => array('key' => 'to', 'value' => '2013-01-21 12:02:02')
),
);
делает трюк довольно аккуратно!
Ответ 3
Кажется, это ошибка в маге \sales\order\api\v2.php
Matlock предоставляет возможное решение для этого в разделе комментариев этой темы: http://www.magentocommerce.com/bug-tracking/issue?issue=8073