「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > **Eloquent による単一テーブルの継承と複数テーブルの継承: Laravel アプリケーションにはどちらが適していますか?**

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

2024 年 11 月 15 日に公開
ブラウズ:137

**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 は、共有列を表し、投稿可能オブジェクトを定義します。ポリモーフィックな関係:

class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}

質問/記事モデル

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

class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}

使用例

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

新しい質問の作成

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

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

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

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3