API de Magento 2: Filtrar pedidos por atributo de extensión

10

Tengo una extensión con un atributo asignado a order itemsllamado 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?

Jim
fuente
¿Nadie respondió?
Bunyamin Inan
1
¿Has declarado tu atributo en Module>/etc/extension_attributes.xml?
Thiago Lima
Sí, hombre, no lo hice.
Amit Bera
2
¿Lo hiciste o no? Quizás este sea el problema.
Thiago Lima

Respuestas:

4

Puedes probar esto

/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
Inés
fuente
esto no se da mi respuesta :(
Amit Bera
Por favor explique brevemente
Amit Bera
@AmitBera, debe guardar el atributo en la tabla correspondiente de db y llamar a la API en consecuencia, verifique mi respuesta.
Vivek Kumar
@AmitBera, me está pidiendo que explique sobre los atributos de extensión o sobre el uso de los atributos de extensión en los criterios de búsqueda en API
Agnes
Estoy preguntando sobre los criterios de búsqueda en API
Amit Bera
1

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:

 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

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;

SQLSTATE [42S22]: Columna no encontrado: 1.054 columna Desconocido 'aleatorio' en 'cláusula where', consulta era: SELECT main_table. * FROM sales_orderAS main_tableDONDE (( random= 'aleatorio'))

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;

 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

Lo he probado yo mismo, espero que lo mismo funcione para ti también.

Vivek Kumar
fuente
1

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 selectsi se define un <join>en extension_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.

Mark van der Sanden
fuente