ホームページ > データベース > mysql チュートリアル > Eloquentを使用してLaravelでポストのマルチテーブル継承を実装するにはどうすればよいですか?

Eloquentを使用してLaravelでポストのマルチテーブル継承を実装するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-25 04:40:30
オリジナル
241 人が閲覧しました

How to Implement Multi-Table Inheritance for Posts in Laravel Using Eloquent?

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

シナリオ:

モデルがありますPost という名前を付け、継承を使用して投稿を記事と質問の 2 つのタイプに分割したいと考えています。

単一テーブルの継承

単一テーブルの継承には、同じテーブル内のすべてのタイプの維持が含まれます。 、それらを区別するための列が付いています。このアプローチは簡単ですが、すべての型に適用できない列があるため、多数の NULL 値が発生する可能性があります。

マルチ テーブルの継承

マルチ テーブル継承は、データを複数のテーブルに分割する、よりクリーンなアプローチです。 postable 列は投稿のタイプを示し、postable_id は対応するテーブルの主キーを参照します。

Eloquent での複数テーブル継承の実装

投稿モデル:

投稿可能な関係を投稿モデルに追加します。これはポリモーフィックな関係になります:

<code class="php">class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}</code>
ログイン後にコピー

質問モデルと記事モデル:

投稿タイプごとに個別のモデルを作成し、投稿モデルとの関係を確立します:

<code class="php">class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>
ログイン後にコピー
<code class="php">class Article extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>
ログイン後にコピー

使用法:

  • すべての投稿を取得: Post::all().
  • すべての質問を取得する: Question::all().
  • Post オブジェクトから関連する質問プロパティにアクセスする: $post->postable->question_column .
  • 投稿タイプを決定します: get_class($post->postable)。
  • 新しい質問を作成します:

    • 質問と質問の両方を作成します。投稿オブジェクト。
    • $question->post()->save($post) を使用してリンクします。

推奨事項:

よりユーザーフレンドリーな実装を実現するには、モデル作成ロジックを各モデル クラス内の再利用可能な関数に統合することをお勧めします。

以上がEloquentを使用してLaravelでポストのマルチテーブル継承を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート