[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rafael Aquino Risalte
Criador Rafael Aquino Risalte 18/03/2023

Olá Carlos, blz?

Pra deixar o código mais legível eu gosto sempre de criar métodos com nomes bem objetivos.

Como mencionei em outro ticket anterior eu uso CakePHP na empresa onde trabalho e por lá temos algo mais próximo do data mapper (Repositories e Entities), logo métodos relacionados a querys no banco ficam nos repositories e métodos para manipular informações do modelo ficam na entity;

No Laravel é usado o active record. Então eu só tenho por default o Model e eu custumo criar além dos métodos de query esses métodos para tratar dados.

 

Ex.: App\Model\Tenant.php:

 public function isActive(): bool{

        if ($this->active === 'Y') {

            return true;

        }




        return false;

    }




    public function isNotActive(): bool{

        if ($this->active === 'N') {

            return true;

        }




        return false;

    }




    public function subscriptionIsActive(): bool

    {

        return $this->subscription_active;

    }




    public function subscriptionIsNotActive(): bool

    {

        return !$this->subscription_active;

    }




    public function subscriptionIsSuspended(): bool

    {

        return $this->subscription_suspended;

    }




    public function subscriptionIsNotSuspended(): bool

    {

        return !$this->subscription_suspended;

    }

 

 

Um exemplo de uso de alguns dos métodos acima, na view:

 <td class="d-none d-lg-table-cell align-middle text-center">

     @if ($tenant->isActive())

         <span class="badge badge-pill badge-success">Sim</span>

     @else

         <span class="badge badge-pill badge-danger">Não</span>

     @endif

 </td> 

 

Está certo criar esses métodos no model? Teria uma forma de organizar melhor esses métodos em algum arquivo separado?

 

 

Manager Carlos Ferreira 18/03/2023

Olá, Rafael!

Beleza, e com vc amigo?

 

Boa amigo.

 

Uma alternativa interessante, seria trabalhar com os accessors do Laravel, veja: 

https://laravel.com/docs/10.x/eloquent-mutators#defining-an-accessor

 

Qualquer dúvida, conta comigo. TMJ!

Carlos Ferreira
Criador Rafael Aquino Risalte 18/03/2023

Não sei se entendi.

Mas no meu entendimento um accessor transformaria o "valor" de um atributo quando eu tentasse acessá-lo, no caso do tenant->active:

protected function active(): Attribute    
{
return Attribute::make(
    get: fn (string $value) => $value === 'Y' ? true : false,
    );
}

Se for isso toda vez que acesso o atributo receberei um boleano e não mais o Y ou N.

No caso eu criei um novo método no model, Tenant::isActive() para trabalhar em cima do valor da propriedade e obter alguma informação.
Talvez para esse exemplo não seja tão relevante ter este método, porque é simples mas existem situações mais complexas que podem ser mais úteis
ter este tipo de método. Ai se entendi corretamente o Accessor não seria o que preciso.
Rafael Aquino Risalte
Manager Carlos Ferreira 18/03/2023

Mais ou menos por este caminho mesmo, mas você pode criar custom accessors, tipo:

protected function isActive(): Attribute    

{

    return Attribute::make(

        get: fn () => $this->nomeAtributoAqui === 'Y'

    );

}

 

Dessa forma funciona exatamente como vc estava fazendo.

Carlos Ferreira
Criador Rafael Aquino Risalte 18/03/2023

Certo, entendi.

Quando olhei rapidamente pela documentação não percebi que tinha esse custom accessors.

 

Valeu pela dica.

Rafael Aquino Risalte
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!