[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Alef Silva
Criador Alef Silva 23/01/2024

Referente a aula 06 do módulo 2 do curso Laravel Multi-Tenancy Single Database, tenho a seguinte dúvida:

Na vídeoaula foi implementado um código semelhante a esse abaixo:

<?php

namespace App\Observers;

use App\Tenant\TenantManager;
use Illuminate\Database\Eloquent\Model;

class TenantObserver
{
    public function creating(Model $model)
    {
        $tenant = app(TenantManager::class)->getTenantIdentify();

        $model->setAttribute('tenant_id', $tenant);
    }
}

A partir dessa implementação, eu realizei algumas alterações conforme abaixo:

<?php

namespace App\Observers;

use App\Models\AccessRequest;
use App\Tenant\TenantManager;

class TenantObserver
{
    public function creating(AccessRequest $accessRequest): void
    {
        $tenant = app(TenantManager::class)->getTenantIdentify();

        $accessRequest->setAttribute('tenant_id', $tenant);
    }
}

Realizei a alteração me baseando na documentação do Laravel na versão 10

https://laravel.com/docs/10.x/eloquent#observers

A diferença é a utilização de uma model chamada AccessRequest do meu projeto particular ao invés de Illuminate\Database\Eloquent\Model como parâmetro do método creating()

A dúvida é: Os dois exemplos reproduzem o mesmo efeito ou possuem grandes diferenças? qual seria a mais correta de aplicar? eu posso acabar usando esse observer em várias models conforme o sistema cresce, porém eu não sei de qual forma preciso deixar.

E por último, faço o registro do observer da seguinte maneira:

static::observe(new TenantObserver);

Se eu usar AccessRequest::observe(new TenantObserver); cai na mesma dúvida que eu tenho acima

Manager Carlos Ferreira 23/01/2024

Olá, Alef!

Tudo bem?

 

Passando a classe Model como o tipo no método creating te permite reutializar esse mesmo observer para todos os seus models, isso vai facilitar o seu trabalho.

 

Agora se fixar qual o model no creating, será necessário criar um observer para cada model (sem problemas, apenas será mais verboso o código)

 

--

 

Agora sobre registrar o observer, tanto faz se registrar diretamente no model, ou no service provider, mais adiante vamos criar uma trait, que vai aplicar todas as tarefas repetidas dos models (inclusive registrar os observers).

 

Fui claro? Respondi sua dúvida?

Carlos Ferreira
Criador Alef Silva 23/01/2024

Ótima explicação !! consegui entender perfeitamente essa dúvida, obrigado pelo apoio ;)

Alef Silva
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!