ホームページ  >  記事  >  データベース  >  **Eloquent による単一テーブルの継承と複数テーブルの継承: Laravel アプリケーションにはどちらが適していますか?**

**Eloquent による単一テーブルの継承と複数テーブルの継承: Laravel アプリケーションにはどちらが適していますか?**

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 03:13:02727ブラウズ

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

Laravel の Eloquent を使用した単一テーブルの継承の実装

データベース モデルを使用する場合、継承は関連するエンティティの階層を定義する方法を提供します。ただし、単一テーブル継承と複数テーブル継承のどちらかを選択する場合、多くの場合、後者がより効率的で柔軟なソリューションとして現れます。

単一テーブルの継承

概念的には単純ですが、単一テーブル継承では、すべての型のすべての列を 1 つのテーブルに格納する必要があるため、NULL 値が急増する可能性があります。これは、特に大規模なデータセットの場合、データベースのパフォーマンスに影響を与える可能性があります。

Eloquent による複数テーブルの継承

複数テーブルの継承には、単一のテーブルを複数のテーブルに分割することが含まれます。特定のモデルタイプ。 Laravel の Eloquent フレームワークは、これらの関係をシームレスに管理するためのポリモーフィックな関係を提供します。

Post Model

すべての投稿タイプの基本クラスである Post は、共有列を表し、投稿可能オブジェクトを定義します。ポリモーフィックな関係:

<code class="php">class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}</code>

質問/記事モデル

質問や記事などの各特定の投稿タイプは投稿から拡張され、基本モデルとの morphOne 関係を定義します。 :

<code class="php">class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>

使用例

  • すべての投稿を取得: $posts = Post::all();
  • すべての質問を取得します: $questions = Question::all();
  • 投稿から質問固有の列を取得します: $question_column = $post- >postable->question_column;
  • 投稿タイプの確認: echo 'Type: '.get_class($post->postable);

新しい質問の作成

新しい質問を作成するには、複数テーブルの継承を維持するために Post テーブルにリンクする必要があります。

<code class="php">$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'My Question';
$question->save();

$question->post()->save($post);</code>

複数テーブルの継承にはより複雑な作業が伴いますが、により、よりクリーンなデータベース構造が提供され、パフォーマンスが向上し、複雑な関係をモデリングする際の柔軟性が向上します。

Laravel でのマルチテーブル継承に関する包括的なチュートリアルについては、元の質問の回答で提供されているリソースを参照してください。

以上が**Eloquent による単一テーブルの継承と複数テーブルの継承: Laravel アプリケーションにはどちらが適していますか?**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。