API Magento 2: фільтруйте замовлення за атрибутом розширення


10

У мене є розширення з атрибутом, призначеним для order itemsвиклику warehouse.
Я бачу цей атрибут під властивістю " extension_attributes".
Мені потрібно фільтрувати замовлення на основі цього атрибута. Я не можу знайти жодної документації, як це зробити.

Приклад фрагмента відповіді API:

[items] => Array(
    [0] => Array(
        [extension_attributes] => Array(
            [warehouse] => MyWarehouse
        )
    )
)

Наступний фільтр генерує внутрішню помилку:

searchCriteria[filter_groups][2][filters][0][field]=warehouse,searchCriteria[filter_groups][2][filters][0][value]=mywarehouse,searchCriteria[filter_groups][2][filters][0][condition_type]=eq

Будь-які пропозиції щодо того, як я можу фільтрувати замовлення за допомогою атрибута складу через API?

- Додатковий пункт щодо цього питання:

У такому випадку, якщо ми будемо вести блог Fooman. Тоді ми можемо фільтрувати колекцію за атрибутом розширення * ?

  • Фільтр колекції за цим розширенням Атрибут Треба працювати швидко?
  • Якщо ми використовуємо власну таблицю db для збереження цієї таблиці атрибутів розширення, то як можна фільтрувати? Чи повинен він працювати і на Magento frontend та на бекенді.
  • де потрібні зміни та до якого класу потрібно додати або будь-який довідковий блог?

Чекаєте хорошого та опишіть / коротку відповідь з цього приводу?


Ніхто не відповів?
Бунямін Інан

1
Ви декларували свій атрибут у Module>/etc/extension_attributes.xml?
Тіаго Ліма

Так, чоловіче, я цього не зробив.
Аміт Бера

2
Ви зробили чи не зробили? Можливо, це питання.
Тіаго Ліма

Відповіді:


4

Ви можете спробувати це

/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=warehouse&searchCriteria[filter_groups][0][filters][0][value]=MyWarehouse&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

на це не дано моєї відповіді :(
Аміт Бера

Будь ласка, поясніть коротко
Аміт Бера

@AmitBera вам потрібно зберегти атрибут у відповідній таблиці db та API API відповідно, перевірте мою відповідь.
Вівек Кумар

@AmitBera Ви просите мене пояснити про атрибути розширення або про використання атрибутів розширення в критеріях пошуку в API
Агнес

Я запитую про критерії пошуку в API
Amit Bera

1

Пошукові критерії не фільтрують результати з відповіді API, а не db / collection, якщо спеціальні атрибути у extension_attribute недоступні у db як стовпець у таблиці, звідки збираються дані, він не отримає відповіді.

Наприклад, наприклад. Я здійснюю наступний дзвінок API -

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=random&searchCriteria[filter_groups][0][filters][0][value]=random&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

Тоді як у таблиці_задачі (з якої API отримує відповідь) немає стовпця, який називається випадковим, я отримую наступну помилку;

SQLSTATE [42S22]: Стовпець не знайдено: 1054 Невідомий стовпець "випадковий" у "де пункт", запит був: SELECT main_table. * FROM sales_orderAS main_tableWHERE (( random= 'random'))

Отже, якщо вам потрібно зателефонувати на власні користувальницькі дані в API, які вам потрібно зберегти у відповідній таблиці в новому стовпці, то ви можете його зателефонувати, використовуючи ім'я стовпця як поле відповідника та значення як бажане значення, як показано нижче;

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=column_name&searchCriteria[filter_groups][0][filters][0][value]=desired_value&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

Я сам це перевірив, сподіваюся, те саме працює і для вас.


1

На момент написання цього (Magento 2.2), я не думаю, що існує спосіб фільтрувати атрибути розширення. Незважаючи на те, що вони присутні в основний колекції , selectякщо ви визначили <join>в extension_attributes.xml, здається , що ви не можете фільтрувати по ньому.

Розробник розширення залежить від способу фільтрації значень атрибуту розширення. Приклад ви можете побачити в модулі платежів Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

У цьому плагіні ви можете бачити, як вони очікують, що таблиця буде вже приєднана (як це визначено в extension_attributes.xml), але застосуйте фільтр вручну.


0

@AmitBera Я не впевнений у цьому на 100%, і це не дає відповіді на всі запитання, але я думаю, що спочатку вам потрібно спочатку скористатися JoinProcessor для пошуку критеріїв, а потім скористатися файлом. ви можете дізнатися більше, як це зробити на цьому http://devdocs.magento.com/guides/v2.2/extension-dev-guide/searching-with-repositories.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.