Magento 2 API: Filtruj zamówienia według atrybutu rozszerzenia

10

Mam rozszerzenie z przypisanym atrybutem o order itemsnazwie warehouse.
Widzę ten atrybut pod właściwością „ extension_attributes”.
Muszę filtrować zamówienia na podstawie tego atrybutu. Nie mogę znaleźć żadnej dokumentacji, jak to zrobić.

Przykładowy fragment odpowiedzi interfejsu API:

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

Poniższy filtr generuje błąd wewnętrzny:

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

Wszelkie sugestie dotyczące tego, jak mogę filtrować zamówienia za pomocą atrybutu magazynowego za pośrednictwem API?

- Dodatkowy punkt do tego pytania:

W takim przypadku, jeśli będziemy obserwować bloga Fooman. Czy możemy przefiltrować kolekcję według atrybutu rozszerzenia * ?

  • Filtruj kolekcję według tego rozszerzenia Atrybut Czy należy uruchomić szybko?
  • Jeśli używamy niestandardowej tabeli db do zapisania tej tabeli atrybutów rozszerzenia, to jak można filtrować? Powinno to działać również jako frontend i backend Magento.
  • gdzie w razie potrzeby należy zmodyfikować i do której klasy dodać bloga?

Czekać na dobre i opisać / krótką odpowiedź na te pytania?

Jim
źródło
Nikt nie odpowiedział?
Bunyamin Inan
1
Czy zadeklarowałeś swój atrybut w Module>/etc/extension_attributes.xml?
Thiago Lima,
Tak człowieku, nie zrobiłem tego.
Amit Bera
2
Zrobiłeś czy nie? Może to jest problem.
Thiago Lima,

Odpowiedzi:

4

Możesz tego spróbować

/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
Agnieszka
źródło
nie otrzymałem mojej odpowiedzi :(
Amit Bera
Proszę wyjaśnić w skrócie
Amit Bera
@AmitBera musisz zapisać atrybut w odpowiedniej tabeli db i odpowiednio wywołać API, sprawdź moją odpowiedź.
Vivek Kumar
@AmitBera, proszę mnie o wyjaśnienie na temat atrybutów rozszerzenia lub używania atrybutów rozszerzenia w kryteriach wyszukiwania w interfejsie API
Agnes
Pytam o kryteria wyszukiwania w API
Amit Bera
1

SearchCriteria nie filtruje wyników z odpowiedzi API zamiast z db / collection, jeśli niestandardowe atrybuty w atrybucie extension_attribute nie są dostępne w db jako kolumna w tabeli, z której pobierane są dane, nie przyjdzie w odpowiedzi.

Na przykład Wykonuję następujące wywołanie interfejsu 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

Następnie, ponieważ w tabeli Sales_order nie ma kolumny o nazwie random (z której API pobiera odpowiedź), pojawia się następujący błąd;

SQLSTATE [42S22]: Nie znaleziono kolumny: 1054 Nieznana kolumna „losowa” w klauzuli „where”, zapytanie brzmiało: SELECT main_table. * FROM sales_orderAS main_tableWHERE (( random= „random”))

Tak więc, jeśli musisz wywołać swoje niestandardowe dane w interfejsie API, musisz zapisać w odpowiedniej tabeli w nowej kolumnie, możesz normalnie wywołać ją, używając nazwy kolumny jako pola instalatora i wartości jako pożądanej wartości, jak poniżej;

 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

Sam to przetestowałem, mam nadzieję, że to samo dla ciebie zadziała.

Vivek Kumar
źródło
1

W chwili pisania tego (Magento 2.2) nie sądzę, aby istniał sposób filtrowania atrybutów rozszerzenia. Choć są one obecne w kolekcji bazowej jest selectjeśli definiujemy <join>w extension_attributes.xmlwydaje się, że nie można na nim filtr.

Deweloper rozszerzenia musi zapewnić sposób filtrowania według wartości atrybutu rozszerzenia. Przykład możesz zobaczyć w module płatności Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

W tej wtyczce możesz zobaczyć, jak oczekują, że tabela zostanie już dołączona (tak jak jest zdefiniowana extension_attributes.xml), ale zastosuj filtr ręcznie.

Mark van der Sanden
źródło