Magento 2

Repository e Factory no Magento 2 – Quando devemos utilizar?

Quando devemos utilizar Repository e Factory no Magento 2. Alguns exemplos práticos da utilização do Factory e Repository:

// Utilizando Factory 
$object = $this->myFactory->create();
$object->load($myId);

// Utilizando o Repository
$repo   = $this->myRepository();
$object = $repo->getById($myId);

Mais alguns exemplos..

// Usando o Factory para Salvar
$object = $this->myFactory->create();
$object->load($myId);
$object->setData('something', 'somethingDifferent')->save();

// Usando o Repository para Salvar
$repo   = $this->myRepository();
$object = $repo->getById($myId);
$object->setData('something', 'somethingDifferent');
$repo->save($object);

Se houver um repositório e ele fizer bem o que você precisa, prefira sempre o repositório.

Repositórios fazem parte dos Contratos de Serviço (são implementações de interfaces em Api), o que significa que são uma interface pública para outros módulos.

Use Repositórios para carregamento completo
$ model-> load () não faz parte do contrato de serviço. Eu tinha uma pergunta sobre esse tópico específico, você pode achar as respostas úteis: Existe alguma razão para preferir $ model-> load () em vez de contratos de serviço?

Use Factory para criar novas entidades
Repositórios não vêm com métodos para criar uma nova entidade, então, nesse caso, você precisará de uma fábrica. Mas use a fábrica para a interface, como Magento \ Catalog \ Api \ Data \ ProductInterfaceFactory – ele criará a implementação certa com base na configuração de DI.

Então use o método repository-> save () para salvá-lo.

Use Factory de coleta se precisar de mais controle
O que segue não é a melhor prática oficial do Magento, mas atualmente, os repositórios não oferecem um controle preciso sobre o que carregar. A API de critérios de pesquisa permite definir filtros, mas, por exemplo, não há como selecionar atributos EAV particulares ou especificar quais tabelas de índice juntar.

Esses são detalhes de implementação, ocultos das APIs de contrato de serviço, mas geralmente esses detalhes de implementação são importantes e você obtém um desempenho ruim se ignorá-los. Por esse motivo, assim que os repositórios estão me limitando, não hesito mais em usar as coleções subjacentes.

Post Recentes

CNPJ alfanumérico Magento 2: módulo grátis com máscara e validação

Módulo gratuito Roger_CnpjAlfanumerico que aplica máscara e validação do novo CNPJ alfanumérico no checkout e formulários do Magento 2 e…

4 dias atrás

CNPJ alfanumérico no WooCommerce: plugin grátis de máscara e validação

A partir de 06/07/2026 a Receita passa a emitir CNPJ alfanumérico. Conheça o plugin grátis que aplica máscara e validação…

4 dias atrás

Como remover um modulo do Magento 2

Para remover um módulo do Magento 2, siga os passos abaixo: 1. Desabilitar o módulo Primeiro, desabilite o módulo usando…

1 ano atrás

Criar um memorando de crédito (cancelar) invoice no Magento 2

Para cancelar 100% do pedido e criar um crédito para todos os itens através da API REST do Magento 2,…

2 anos atrás

Consultando no banco quantidade disponivel para Venda (estoque)

No Magento 2, a quantidade "reservada" na "Salable Quantity" é gerenciada principalmente pelos módulos MSI (Multi-Source Inventory). A "Salable Quantity"…

2 anos atrás

Admin do Magento 2 não acessa

Como corrigir o erro ao acessar o Admin do Magento 2. Mesmo após fazer o login, permanece na tela de…

2 anos atrás