Organizão de código nos Models
[Finalizado Pelo Aluno]
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?
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!
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.
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.
Certo, entendi.
Quando olhei rapidamente pela documentação não percebi que tinha esse custom accessors.
Valeu pela dica.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!