27
loading...
This website collects cookies to deliver better user experience
\Magento\Framework\Api\SearchCriteriaInterface
, que permite criar solicitações personalizadas com condições diferentes para executar filtros, ordenações, etc. getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
, que define que o repositório deve retornar um objeto do resultado da pesquisa, através da coleção da entidade pesquisada. O objeto desta entidade deve implementar a interface \Magento\Framework\Api\SearchResultsInterface
.<?php
namespace {Vendor}\{Module}\Api;
use {Vendor}\{Module}\Api\Data\{EntityName}Interface;
use Magento\Framework\Api\SearchCriteriaInterface;
interface {EntityName}RepositoryInterface
{
// Other repository methods
public function getList(SearchCriteriaInterface $searchCriteria): {EntityName}Interface;
}
\Magento\Framework\Api\SearchResultsInterface
. Esta interface implementará os métodos getItems()
, que retorna um array com os items correspondentes ao critério de busca do repositório, e o método setItems(array $items)
, que deve receber um array com os itens a serem definidos para o critério de busca.<?php
namespace {Vendor}\{Module}\Api\Data;
use Magento\Framework\Api\SearchResultsInterface;
interface {EntityName}SearchResultsInterface extends SearchResultsInterface
{
public function getItems(): array;
public function setItems(array $items): self;
}
di.xml
, para que o arquivo fique devidamente implementado e possa descrever em como os métodos serão executados.<preference for="{Vendor}\{Module}\Api\Data\{EntityName}SearchResultsInterface" type="{Vendor}\{Module}\Model\{EntityName}SearchResults" />
\Magento\Framework\Api\SearchResults
que implementará os métodos getItems()
e setItems(array $items)
da api personalizada dos resultados da pesquisa.<?php
namespace {Vendor}\{Module}\Model;
use Magento\Framework\Api\SearchResults;
use {Vendor}\{Module}\Api\Data\{EntityName}SearchResultsInterface;
class {EntityName}SearchResults extends SearchResults implements {EntityName}SearchResultsInterface
{
}
getList(SearchCriteriaInterface $searchCriteria)
que retornará um objeto da entitdade da \{Vendor}\{Module}\Api\Data\{EntityName}SearchResultsInterface
.<?php
namespace {Vendor}\{Module}\Model;
use {Vendor}\{Module}\Api\{EntityName}RepositoryInterface;
use {Vendor}\{Module}\Model\ResourceModel\{EntityName}\CollectionFactory;
use {Vendor}\{Module}\Model\{EntityName}SearchResultsFactory;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Framework\Api\SearchCriteriaInterface;
use {Vendor}\{Module}\Model\ResourceModel\{EntityName}\Collection;
use {Vendor}\{Module}\Api\Data\{EntityName}SearchResultsInterface;
class {EntityName}Repository implements {EntityName}RepositoryInterface
{
private CollectionFactory $collectionFactory;
private {EntityName}SearchResultsFactory $entityNameSearchResultsFactory;
private CollectionProcessorInterface $collectionProcessor;
public function __construct(
// Other classes for dependency injection
CollectionFactory $collectionFactory,
{EntityName}SearchResultsFactory $entityNameSearchResultsFactory,
CollectionProcessorInterface $collectionProcessor
) {
$this->collectionFactory = $collectionFactory;
$this->entityNameSearchResultsFactory = $entityNameSearchResultsFactory;
$this->collectionProcessor = $collectionProcessor;
}
// Implementation of other repository methods
public function getList(SearchCriteriaInterface $searchCriteria): {EntityName}SearchResultsInterface
{
/** @var Collection $collection */
$collection = $this->collectionFactory->create();
$this->collectionProcessor->process($searchCriteria, $collection);
/** @var {EntityName}SearchResultsInterface $searchResults */
$searchResults = $this->entityNameSearchResultsFactory->create();
$searchResults->setSearchCriteria($searchCriteria);
$searchResults->setItems($collection->getItems());
return $searchResults;
}
}
{EntityName}Repository::getList(SearchCriteriaInterface $searchCriteria)
. Os critérios de busca devem ser especificados na URL da requisição em APIs do método POST. O padrão básico para especificar o critério de busca deve seguir o modelo:searchCriteria[filter_groups][{index}][filters][{index}][field]={field_name}
searchCriteria[filter_groups][{index}][filters][{index}][value]={search_value}
searchCriteria[filter_groups][{index}][filters][{index}][condition_type]={operator}
condition_type
não seja especificado, eles assumirá o valor de eq
.filter_groups
no array define um ou mais filters
. Cada filtro define um termo de busca e o field
, value
e condition_type
de cada termo de busca deve estar atribuído ao mesmo número do index
, iniciando em 0
.Tipo | Descrição |
---|---|
eq | Igual ao valor passado |
finset | O valor passado dentro de um conjunto |
from | O início de um intervalo. Deve ser usado com a condição to |
gt | Maior que o valor passado |
gteq | Maior ou igual ao valor passado |
in | O valor passado pode ser separados por vírgula e estar dentro |
like | O valor passado pode ter os caracteres especiais SQL |
lt | Menor que o valor passado |
lteq | Menor ou igual ao valor passado |
moreq | Mais ou igual ao valor passado |
neq | Não igual ao valor passado |
nfinset | O valor passado não está dentro de um conjunto |
nin | O valor passado pode ser separados por vírgula e não estar dentro |
notnull | O valor passado não pode ser null |
null | O valor passado for null |
to | O fim de um intervalo. Deve ser usado com a condição from |
filters
dentro do filter_groups
. Condicionais do tipo OR não podem utilizar diferentes filter_groups
filter_groups
searchCriteria[sortOrders][{index}][field]={field-name}
: especifica o campo que será ordenado. Por padrão, os resultados desta busca são retornados em ordem decrescente. É possível ordenar múltiplos campos especificando o valor com ASC
ou DESC
;searchCriteria[pageSize]
: especifica o número máximo de itens para retornar. O valor deve ser um inteiro. Caso o valor não for passado, o sistema irá retornar todas os valores;searchCriteria[currentPage]
: retorna a página atual da busca.Valores entre chaves ({test}
) devem ser alterados na implementação do código.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
- app/
- code/
- {Vendor}/
- {Module}/
- Api/
- {EntityName}RepositoryInterface.php
- Data/
- {EntityName}SearchResultsInterface.php
- etc/
- module.xml
- {area}/
- di.xml
- Model/
- {EntityName}Repository.php
- {EntityName}SearchResults.php
- registration.php
- composer.json