ホームページ >データベース >mysql チュートリアル >Post モデルから拡張した Laravel の Eloquent を使用して、Article モデルと Question モデルの単一テーブル継承を実装するにはどうすればよいでしょうか?
質問:
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>
使用法:
<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 サイトの他の関連記事を参照してください。