No Magento 2, você pode usar um repositório de produtos para filtrar por atributos do produto?
No Magento 2, você pode usar um objeto de critério de pesquisa
e um repositório
Para buscar uma lista de objetos
No entanto, o objeto searchCriteria não (parece?) Possui recursos de filtragem direta. A classe critérios de pesquisa não têm métodos para adicionar algo chamado filterGroups
Mas não está claro o que exatamente um grupo de filtros é graças às matrizes não tipadas do PHP.
Como posso usar um repositório Magento 2 para fazer coisas como
Mostre-me todos os produtos com [este SKU específico]
Mostre-me todos os produtos criados após [esta data]
Parece que esses grupos são uma matriz do Magento \ Framework \ Api \ Search \ FilterGroup, que por sua vez possui filtros \ Magento \ Framework \ Api \ Filter, os filtros podem ser criados com o \ Magento \ Framework \ Api \ FilterBuilder e o condition_type está em a forma de 'eq', 'neq', 'gt' etc. etc. Mas não foi possível encontrar a lista dos tipos de condição suportados: \
Na verdade, algo como uma lista pode ser encontrada em Magento / Framework / Api / CriteriaInterface.php: 79
Confira a seguinte classe de amostra. Para filtrar por SKU, tente o seguinte:
Para criar produtos após uma data específica, faça o seguinte:
Obrigado, exatamente o que eu estava procurando! Parece que adicionar vários filtros cria condições "OU" - existe uma maneira de criar condições "AND"?
- se você tiver um momento. Estou usando o grupo de filtros corretamente? Eles parecem estar aplicando como um OR, não um E magento.stackexchange.com/questions/91023/...
Os filtros são combinados com "OR" dentro de um grupo de filtros e cada grupo é combinado com "AND" no nível dos critérios de pesquisa. Dê uma olhada em: \ Magento \ Framework \ Api \ SearchCriteriaBuilder :: setFilterGroups ($ groups []) e \ Magento \ Framework \ Api \ Search \ FilterGroupBuilder :: setFilters ($ Filters [])
Estou usando o Magento 2.3, o construtor Critérios de pesquisa não filtra o item se um item for "out_of_stock"?
— LDusan
Parece que no seu exemplo \Magento\Framework\Api\Search\SearchCriteriaBuilderé usado (específico da pesquisa), enquanto eu usei \Magento\Framework\Api\SearchCriteriaBuilder(genérico para todos os serviços), veja minha resposta. Além disso, fornece uma maneira mais simples de adicionar filtro, as addFilter()assinaturas são diferentes.
Concordado, é uma solução ligeiramente diferente.
o addfilter pode usar apenas 1 param?
— Antonio Pedicini 24/09
@LDusan, Você pode me dizer como posso usar "$ searchCriteriaBuilder" no gerenciador de objetos?
Eu acho que você deve adicioná-lo no construtor da sua classe, por que você deseja usar o gerenciador de objetos para isso?