1
resposta

Implementação com polimorfismo

Olá, estou com uma dúvida em uma aplicação Laravel que estou criando a partir do curso. Estou fazendo um sistema de Internet Banking, onde possuo uma conta, e essa conta possui transações, que podem ser de crédito ou débito. Segue a model de conta:

namespace InternetBanking;
use Illuminate\Database\Eloquent\Model;
class Conta extends Model
{

    public function transacoes()
    {
        return $this->hasMany('InternetBanking\Transacao');
    }    
}

Estava pensando em fazer algo com herança, algo como Transação é pai de Transação Crédito e Transação Débito, como as duas classes vão fazer a mesma coisa, estou com dúvida em como implementar isso e relacionar com a conta.

Obrigado!

1 resposta

Oi Mateus, tudo bom?

Acho que com o Eloquent você não vai conseguir implementar a herança e fazer o mapeamento da superclasse de forma nativa. Existem formas de implementar isso na mão a partir de relacionamentos OneToOne entre as classes herdadas. Meio que fazendo composição e herança ao msm tempo.

Uma alternativa é utilizar o Doctrine que é um ORM mais robusto baseado na JPA do java pra PHP que também integra com o laravel, e trabalhar com mapped super class.

Para relacionar com a Conta, você pode dar uma olhada na documentação de associações do doctrine que funciona basicamente com anotações. Como todo o ORM é baseado na especificação de ORMs do Java (JPA) então tem algumas diferenças de sintaxe entre o Eloquent mas é baseado nos mesmos conceitos =)

Espero ter ajudado.

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software