Implementando herança de tabela única com Eloquent do Laravel
Ao trabalhar com modelos de banco de dados, a herança fornece uma maneira de definir hierarquias de entidades relacionadas. No entanto, ao escolher entre herança de tabela única e múltipla, a última geralmente surge como uma solução mais eficiente e flexível.
Herança de tabela única
Embora conceitualmente mais simples, a tabela única a herança requer o armazenamento de todas as colunas de todos os tipos em uma única tabela, levando a uma potencial proliferação de valores NULL. Isso pode afetar o desempenho do banco de dados, especialmente com grandes conjuntos de dados. tipo de modelo específico. A estrutura Eloquent do Laravel oferece relacionamentos polimórficos para gerenciar perfeitamente esses relacionamentos.
Post Model
A classe base para todos os tipos de post, Post, representa as colunas compartilhadas e define um postável relacionamento polimórfico:
class Post estende Eloquent { função pública postável() { return $this->morphTo(); } }
Modelos de pergunta/artigo
class Post extends Eloquent {
public function postable() {
return $this->morphTo();
}
}
class Pergunta estende postagem { postagem de função pública() { return $this->morphOne('Post', 'postável'); } }
Exemplos de uso
class Question extends Post {
public function post() {
return $this->morphOne('Post', 'postable');
}
}
Recuperar todas as postagens: $posts = Post::all();
$post = new Post(); $post->shared_column = 'Nova postagem de pergunta'; $post->salvar(); $pergunta = nova Pergunta(); $question->question_column = 'Minha pergunta'; $question->salvar(); $question->post()->save($post);
Embora a herança de múltiplas tabelas envolva mais complexidade, ela oferece uma estrutura de banco de dados mais limpa, melhora o desempenho e permite maior flexibilidade para modelar relacionamentos complexos.Para tutoriais abrangentes sobre herança de múltiplas tabelas no Laravel, consulte os recursos fornecidos na resposta da pergunta original.Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3