ホームページ >データベース >mysql チュートリアル >Post モデルから拡張した Laravel の Eloquent を使用して、Article モデルと Question モデルの単一テーブル継承を実装するにはどうすればよいでしょうか?

Post モデルから拡張した Laravel の Eloquent を使用して、Article モデルと Question モデルの単一テーブル継承を実装するにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-25 05:08:02599ブラウズ

How can you implement single table inheritance for Article and Question models using Laravel's Eloquent, extending from the Post model?

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

質問:

Post モデルが与えられた場合:

<code class="php">class Post extends Eloquent {

    // Model code...
}</code>

記事モデルと質問モデルの継承を実装して、Post から拡張できるようにするにはどうすればよいですか?

単一テーブルの継承

単一テーブルの継承には、すべてのモデル データの保存が含まれます。モデルを区別するための type 列を含む単一のテーブル内。ただし、このアプローチでは、特定のモデル タイプの未使用の列が原因で多数の NULL 値が発生する可能性があります。

マルチ テーブルの継承

マルチ テーブルの継承では、ポリモーフィズムが採用されており、モデル タイプごとに別のテーブルが使用されます。各モデルを参照テーブルを介して接続しながら作成します。参照テーブルには、postable_id や postable_type などの列が含まれています。

Eloquent Model Setup

Post モデルで、morphTo 関係を定義します。

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

質問モデル内 (Article と同様):

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

使用法:

  • すべての投稿を取得: Post::all()
  • すべての質問を取得します: Question::all()
  • 投稿から質問の詳細を取得します: $question_column2 = $post->postable->question_column2
  • 投稿タイプを確認します: if( $post->postableinstanceof Question)
  • 新しい質問を作成します:
<code class="php">$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'test';
$question->post()->save($post);</code>

結論

複数のテーブル継承は、単一テーブルの継承と比較して、より効率的なデータベース構造。追加のモデル ロジックが必要ですが、Laravel の Eloquent でモデルの継承を処理するための、より柔軟でスケーラブルなアプローチが提供されます。

以上がPost モデルから拡張した Laravel の Eloquent を使用して、Article モデルと Question モデルの単一テーブル継承を実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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