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>
使用法:
新しい質問を作成します:
推奨事項:
よりユーザーフレンドリーな実装を実現するには、モデル作成ロジックを各モデル クラス内の再利用可能な関数に統合することをお勧めします。
以上がEloquentを使用してLaravelでポストのマルチテーブル継承を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。