J'ai une extension avec un attribut attribué à order items
appelé 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?
Module>/etc/extension_attributes.xml
?Réponses:
Vous pouvez essayer ceci
la source
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 -
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;
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;
Je l'ai testé moi-même, j'espère que ça marche aussi pour vous.
la source
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
select
si vous définissez un<join>
inextension_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.la source
@AmitBera Je ne suis pas sûr à 100% de cela et cela ne donne pas de réponse à toutes vos questions, mais je pense que vous devez d'abord utiliser JoinProcessor pour rechercher des critères, puis utiliser Filer. vous pouvez vérifier comment le faire sur ce http://devdocs.magento.com/guides/v2.2/extension-dev-guide/searching-with-repositories.html
la source