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. Затем мы можем отфильтровать коллекцию по атрибуту extension * ?

  • Фильтр коллекции по этому расширению Атрибут Должен быть запущен быстро?
  • Если мы используем пользовательскую таблицу БД для сохранения этой таблицы атрибутов расширения, то как это сделать? Должен ли он работать фронтенд magento и backend также.
  • где нужно сделать модификацию и какой класс нужно добавить или какой-нибудь ссылочный блог?

Ждать добра и описать / краткий ответ по этому пункту?


Никто не ответил?
Буньямин Инан

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 Вы должны сохранить атрибут в соответствующей таблице БД и вызвать API соответственно, проверьте мой ответ.
Вивек Кумар

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

Я спрашиваю о критериях поиска в API
Амит Бера

1

Вместо этого searchCriteria не фильтрует результаты из ответа API вместо этого из db / collection, если пользовательские атрибуты в extension_attribute не доступны в базе данных как столбец таблицы, из которой выбираются данные, в ответ они не поступят.

Например, Я делаю следующий вызов 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

Тогда, поскольку в таблице sales_order нет столбца с именем random (из которого 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>in 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.