API Magento 2: filtrer les commandes par attribut d'extension


10

J'ai une extension avec un attribut attribué à order itemsappelé warehouse.
Je peux voir cet attribut sous la propriété " extension_attributes".
J'ai besoin de filtrer les commandes en fonction de cet attribut. Je ne trouve aucune documentation sur la façon de procéder.

Exemple d'extrait de réponse d'API:

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

Le filtre suivant génère une erreur interne:

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

Des suggestions sur la façon de filtrer les commandes à l'aide de l'attribut d'entrepôt via le API?

- Point supplémentaire sur cette question:

Dans ce cas, si nous suivons le blog Fooman, alors pouvons-nous filtrer la collection par l' attribut extension * ?

  • Filtre de collecte par cette extension Attribut Doit être exécuté rapidement?
  • Si nous utilisons une table db personnalisée pour enregistrer cette table d'attributs d'extension, comment filtrer? Cela devrait-il fonctionner avec le frontend et le backend de magento?
  • où la modification est-elle nécessaire et quelle classe doit être ajoutée ou un blog de référence?

Attendez bien et décrivez / brève réponse sur ces points?


Personne n'a répondu?
Bunyamin Inan

1
Avez-vous déclaré votre attribut à Module>/etc/extension_attributes.xml?
Thiago Lima

Oui, mec, je ne l'ai pas fait.
Amit Bera

2
Vous l'avez fait ou pas? C'est peut-être le problème.
Thiago Lima

Réponses:


4

Vous pouvez essayer ceci

/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

ce n'est pas ma réponse :(
Amit Bera

Veuillez expliquer en bref
Amit Bera

@AmitBera vous devez enregistrer l'attribut dans le tableau correspondant de db et appeler l'API en conséquence, vérifiez ma réponse.
Vivek Kumar

@AmitBera vous me demandez d'expliquer les attributs d'extension ou d'utiliser les attributs d'extension dans les critères de recherche de l'API
Agnès

Je demande des critères de recherche dans l'API
Amit Bera

1

Les critères de recherche ne filtrent pas les résultats de la réponse de l'API à la place à partir de la base de données / collection, si les attributs personnalisés dans extension_attribute ne sont pas disponibles dans la base de données en tant que colonne dans le tableau d'où les données sont extraites, elles ne seront pas envoyées en réponse.

Par exemple. Je fais un appel API suivant -

 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

Puis, comme il n'y a pas de colonne appelée aléatoire dans la table sales_order (à partir de laquelle l'API récupère la réponse), j'obtiens l'erreur suivante;

SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'aléatoire' dans 'clause où', la requête était: SELECT main_table. * FROM sales_orderAS main_tableWHERE (( random= 'random'))

Donc, si vous devez appeler vos données personnalisées dans l'API, vous devez enregistrer dans le tableau respectif dans une nouvelle colonne, vous pouvez l'appeler normalement en utilisant le nom de la colonne comme champ d'ajustement et la valeur comme valeur souhaitée, comme ci-dessous;

 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

Je l'ai testé moi-même, j'espère que ça marche aussi pour vous.


1

Au moment d'écrire ceci (Magento 2.2), je ne pense pas qu'il existe un moyen de filtrer les attributs d'extension. Bien qu'ils soient présents dans les collections sous-jacentes selectsi vous définissez un <join>in extension_attributes.xml, il semble que vous ne puissiez pas le filtrer.

Il appartient au développeur d'extension de fournir un moyen de filtrer les valeurs d'un attribut d'extension. Vous pouvez voir un exemple dans le module de paiement Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

Dans ce plugin, vous pouvez voir comment ils s'attendent à ce que la table soit déjà jointe (comme il est défini dans extension_attributes.xml), mais appliquez le filtre manuellement.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.