En Magento 2, ¿puede usar un repositorio de productos para filtrar por atributos del producto?
En Magento 2, puede usar un objeto de criterio de búsqueda
\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria,
y un repositorio
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
Para buscar una lista de objetos
$searchCriteria->getPageSize(10);
$list = $productRepository->getList($searchCriteria);
Sin embargo, el objeto searchCriteria no tiene (¿parece?) Capacidades de filtrado directo. La clase criterios de búsqueda no tiene métodos para agregar algo llamado filterGroups
#File: lib/internal/Magento/Framework/Api/SearchCriteria.php
public function getFilterGroups()
{
$filterGroups = $this->_get(self::FILTER_GROUPS);
return is_array($filterGroups) ? $filterGroups : [];
}
public function setFilterGroups(array $filterGroups = null)
{
return $this->setData(self::FILTER_GROUPS, $filterGroups);
}
Pero no está claro qué es exactamente un grupo de filtros gracias a las matrices sin tipo de PHP.
¿Cómo puedo usar un repositorio de Magento 2 para hacer cosas como
- Muéstrame todos los productos con [este SKU específico]
- Muéstrame todos los productos creados después de [esta fecha]
- etc.
magento2
api
filter
repository
search-criteria
Alan Storm
fuente
fuente
Respuestas:
Echa un vistazo a la siguiente clase de muestra. Para filtrar por SKU, intente esto:
Para obtener productos creados después de una fecha específica, esto:
Clase de muestra:
fuente
fuente
\Magento\Framework\Api\Search\SearchCriteriaBuilder
se usa (búsqueda específica), mientras que yo usé\Magento\Framework\Api\SearchCriteriaBuilder
(genérico para todos los servicios), vea mi respuesta. También proporciona una forma más simple de agregar filtros, lasaddFilter()
firmas son diferentes.