Magento 2 API: Filtern Sie Bestellungen nach Erweiterungsattribut

10

Ich habe eine Verlängerung mit einem Attribut zugewiesen order itemsgenannt warehouse.
Ich kann dieses Attribut unter der Eigenschaft " extension_attributes" sehen.
Ich muss Bestellungen basierend auf diesem Attribut filtern. Ich kann keine Dokumentation dazu finden.

Beispiel-API-Antwort-Snippet:

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

Der folgende Filter generiert einen internen Fehler:

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

Irgendwelche Vorschläge, wie ich Bestellungen mithilfe des Lagerattributs über das API? Filtern kann .

- Zusätzlicher Punkt zu dieser Frage:

In diesem Fall, wenn wir dem Fooman-Blog folgen. Können wir dann die Sammlung nach dem Attribut extension * filtern ?

  • Sammlungsfilter nach dieser Erweiterung Attribut Sollte schnell ausgeführt werden?
  • Wenn wir eine benutzerdefinierte DB-Tabelle zum Speichern dieser Erweiterungsattributtabelle verwenden, wie kann dann gefiltert werden? Sollte es auch Magento Frontend und Backend funktionieren.
  • Wo müssen Änderungen vorgenommen werden und welche Klasse muss hinzugefügt werden oder ein Referenzblog?

Warten Sie auf eine gute und beschreiben / kurze Antwort zu diesen Punkten?

Jim
quelle
Niemand antwortete?
Bunyamin Inan
1
Haben Sie Ihr Attribut bei deklariert Module>/etc/extension_attributes.xml?
Thiago Lima
Ja Mann, ich habe es nicht getan.
Amit Bera
2
Du hast oder nicht? Vielleicht ist das das Problem.
Thiago Lima

Antworten:

4

Sie können dies versuchen

/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
Agnes
quelle
Dies ist nicht meine Antwort gegeben :(
Amit Bera
Bitte erklären Sie kurz
Amit Bera
@AmitBera Sie müssen das Attribut in der entsprechenden Tabelle von DB speichern und API entsprechend aufrufen, überprüfen Sie meine Antwort.
Vivek Kumar
@AmitBera Sie bitten mich, über die Erweiterungsattribute oder über die Verwendung der Erweiterungsattribute in Suchkriterien in API zu erklären
Agnes
Ich frage nach Suchkriterien in API
Amit Bera
1

Die searchCriteria filtert stattdessen keine Ergebnisse aus der API-Antwort aus der Datenbank / Sammlung, wenn benutzerdefinierte Attribute in extension_attribute in der Datenbank nicht als Spalte in der Tabelle verfügbar sind, aus der die Daten abgerufen werden, werden sie nicht beantwortet.

Zum Beispiel. Ich mache folgenden API-Aufruf -

 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

Da es in der Tabelle sales_order keine Spalte mit dem Namen random gibt (aus der die API die Antwort abruft), wird der folgende Fehler angezeigt.

SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'random' in 'where-Klausel', Abfrage war: SELECT main_table. * FROM sales_orderAS main_tableWHERE (( random= 'random'))

Wenn Sie also Ihre benutzerdefinierten Daten in der API aufrufen müssen, müssen Sie sie in der entsprechenden Tabelle in einer neuen Spalte speichern. Sie können sie dann normal aufrufen, indem Sie den Spaltennamen als Fiter-Feld und den Wert als gewünschten Wert verwenden (siehe unten).

 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

Ich habe es selbst getestet, ich hoffe, dass es auch für Sie funktioniert.

Vivek Kumar
quelle
1

Im Moment des Schreibens (Magento 2.2) glaube ich nicht, dass es eine Möglichkeit gibt, nach Erweiterungsattributen zu filtern. Obwohl sie in den zugrunde liegenden Sammlungen vorhanden sind, selectwenn Sie ein <join>In definieren extension_attributes.xml, können Sie anscheinend nicht danach filtern.

Es ist Sache des Erweiterungsentwicklers, eine Möglichkeit zum Filtern nach Werten eines Erweiterungsattributs bereitzustellen. Ein Beispiel finden Sie im Amazon-Zahlungsmodul: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

In diesem Plugin können Sie sehen, wie erwartet wird, dass die Tabelle bereits verbunden ist (wie in definiert extension_attributes.xml), aber den Filter manuell anwenden.

Mark van der Sanden
quelle