Tengo una extensión con un atributo asignado a order items
llamado warehouse
.
Puedo ver este atributo debajo de la propiedad " extension_attributes
".
Necesito filtrar pedidos basados en este atributo. No puedo encontrar ninguna documentación sobre cómo hacer esto.
Fragmento de respuesta de API de ejemplo:
[items] => Array(
[0] => Array(
[extension_attributes] => Array(
[warehouse] => MyWarehouse
)
)
)
El siguiente filtro genera un error interno:
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
¿Alguna sugerencia sobre cómo puedo filtrar pedidos utilizando el atributo de almacén a través de API
?
- Punto adicional sobre esta pregunta:
En este caso, si seguiremos el blog de Fooman. ¿Entonces podemos filtrar la colección por el atributo de extensión * ?
- Filtro de recopilación por esta extensión Atributo ¿Debe ejecutarse rápidamente?
- Si usamos una tabla db personalizada para guardar esta tabla de atributos de extensión, ¿cómo podemos filtrar? ¿Debería funcionar magento frontend y backend también?
- ¿dónde se necesita modificar y qué clase se necesita agregar o algún blog de referencia?
¿Esperar bien y describir / breve respuesta sobre estos puntos?
Module>/etc/extension_attributes.xml
?Respuestas:
Puedes probar esto
fuente
SearchCriteria no filtra los resultados de la respuesta API en su lugar de db / collection, si los atributos personalizados en extension_attribute no están disponibles en la base de datos como una columna en la tabla desde donde se obtienen los datos, no recibirá respuesta.
Por ej. Hago la siguiente llamada a la API:
Entonces, como no hay una columna llamada random en la tabla sales_order (de la cual la API está obteniendo respuesta), recibo el siguiente error;
Entonces, si tiene que llamar a sus datos personalizados en la API, debe guardarlos en la tabla respectiva en una nueva columna, entonces puede llamarlos normalmente usando el nombre de la columna como el campo de referencia y el valor como su valor deseado, como se muestra a continuación;
Lo he probado yo mismo, espero que lo mismo funcione para ti también.
fuente
En el momento de escribir esto (Magento 2.2), no creo que haya una manera de filtrar los atributos de extensión. A pesar de que están presentes en la colección subyacente es
select
si se define un<join>
enextension_attributes.xml
, parece que no puede filtrar en él.Depende del desarrollador de la extensión proporcionar una forma de filtrar los valores de un atributo de extensión. Puede ver un ejemplo en el módulo de pagos de Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51
En ese complemento, puede ver cómo esperan que la tabla ya esté unida (como se define en
extension_attributes.xml
), pero aplique el filtro manualmente.fuente
@AmitBera No estoy 100% seguro de esto y no responde a todas sus preguntas, pero creo que primero debe usar JoinProcessor para buscar criterios y luego usar filer. Puede consultar más información sobre cómo hacerlo en este http://devdocs.magento.com/guides/v2.2/extension-dev-guide/searching-with-repositories.html
fuente