Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Criar um repositório para metodos do Model

Opa pessoal, boa noite tarde! Estou querendo seguir essa mesma logica de repositório a fim de segregar melhor minha Model. Minha ideia é justamente deixar minha Model apenas para os relacionamentos, e atributos, enquanto que a query em si, filtros e outras implementações ficasse em um repositório. Como eu poderia fazer isso? Como eu instancio minha Model no meu repositório?

2 respostas
solução!

Oii, Samuel! Tudo bem?

Parabéns por estar querendo implementar melhorias em seu projeto com insights da aula, Samuel!

Uma sugestão de fazer isso é utilizando o Service Container e o Service Provider do Laravel. O Service Container é responsável por criar e injetar instâncias para nós, enquanto o Service Provider registra os serviços que queremos prover.

Para criar um repositório para os métodos da sua Model, você pode seguir os seguintes passos:

  • Crie um novo Service Provider executando o comando:
php artisan make:provider NomeDoServiceProvider

Por exemplo, se você quiser criar um repositório para a Model "User", você pode executar:

php artisan make:provider UserRepositoryProvider
  • Abra o arquivo do Service Provider criado, que estará localizado na pasta app/Providers.

  • No método register() do Service Provider, utilize o método bind() do $this->app para ligar a interface do repositório à classe concreta. Por exemplo, se você tiver uma interface chamada UserRepository e uma classe concreta chamada EloquentUserRepository, você pode fazer o seguinte:

$this->app->bind(UserRepository::class, EloquentUserRepository::class);
  • Registre o Service Provider no arquivo config/app.php, adicionando a classe do Service Provider ao array de providers. Por exemplo:
\App\Providers\UserRepositoryProvider::class,

Feito os passos, sempre que você precisar de uma instância do repositório, o Laravel irá criar uma instância da classe concreta correspondente.

Para aprofundar os conhecimentos em Service Container e o Service Provider antes de aplicá-los, recomendo a leitura da documentação oficial do Laravel sobre o tema, dessa forma você consegue criar uma base mais sólida no seu conhecimento.

Espero ter ajudado.

Bons estudos, Samuel!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Maravilha Nathalia, consegui criar o repositório e instanciar a Model dentro da container de serviço, com isso a minha Model realmente ficou mais limpa, só tem as configurações e relacionamentos nela, e todos os métodos que filtram as queries estão no container.

Valeu demais!