"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > **Herança de tabela única vs. herança de múltiplas tabelas com Eloquent: Qual é a certa para sua aplicação Laravel?**

**Herança de tabela única vs. herança de múltiplas tabelas com Eloquent: Qual é a certa para sua aplicação Laravel?**

Publicado em 15/11/2024
Navegar:691

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

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();

    Recuperar todas as perguntas:
  • $questions = Question::all();
  • Recuperar perguntas específicas coluna de uma postagem:
  • $question_column = $post->postable->question_column;
  • Verifique o tipo de postagem:
  • echo 'Type: '.get_class($post->postable) ;
  • Criando uma nova pergunta
  • A criação de uma nova pergunta requer vinculá-la a a tabela Post para manter a herança de múltiplas tabelas:

$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.
            
Tutorial mais recente Mais>

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