2017-08-23 16 views
1

私は、モデルを扱うためにLaravel Eloquentにかなり新しいです。Laravelモデルを正しく拡張するには?

いくつかの共通のプロパティとリレーションを持つ基本Productクラスを作成する必要があります。また、他のいくつかのクラスは共通ではないいくつかのクラスを作成する必要があります。

私は簡単な例を作ってみるよ:

...すべての製品は、「シリアル値」、「ship_date」などを持っていますが、唯一のボトルと電球のクラスは「glass_type」機能を持って、しばらく議長のクラスには別のクラスがあります。

私はいくつかの

abstract class Product extends Model {} 
    class Bottle extends Product {} 

をしていますが、私はこの方法は、製品がどの$ テーブル dbが取り付けられていない、と私は移行テーブルと背後にあるロジックを処理する方法がわからないと思います。

ここで最も適した方法は何ですか?

は、我々が部分的に製品モデル内のすべての必要なフィールドを含むことによって、これを「解決」している事前

+0

あなただけの簡略化のためCOMMUN列を繰り返していますが、Laravel多型の関係で共通の列の外観の多くを持っている場合は、これを見て、移行のために、代わりにそのようなものを抽象化の特徴を使用することができます例:https://laravel.com/docs/5.4/eloquent-relationships#polymor phic-relation – yoeunes

答えて

-1

でいただきありがとうございます。さらに、Typeフィールド( "glass"、 "Chair")を導入し、異なるゲッターメソッドを作成しました。これ以外

あなたはここで説明するよりエレガントな方法、ストアを使用することができます別のテーブル内の各タイプ:モデルのテーブル名を追加します(ベースモデルを拡張し、子1)、
Extending Eloquent Models in Laravel (use different tables)

+0

答えていただきありがとうございます。どのようにモデルロジックを構成しましたか? – Carondimonio

+0

遅れて申し訳ありません。最初にロジックをモデルに入れることができます。しかし、私は自分のクラスをメインパートに使うことをお勧めします。これはあなたが探していたものでしたか? – Fabio

0

は、明示的に、たとえば:

class SomeChildModel extends BaseModel { 

    // Manually set the table name 
    protected $table = 'table_name'; 

} 
+0

親クラス 'BaseModel'からの' $ table'プロパティも変更することを覚えておいてください。 –

+0

こんにちはKuldeepさん、私たちは 'SomeChildModel'のテーブルを指定しています(もちろん、' BaseModel'自体を変更しています。私のunderstandigでは、 'SomeChildModel'のすべてのプロパティを' $ table'に共通のもの私はすべてのidsと共通のプロパティを持っている 'base_model'テーブルを望みます、' SomeChildModel'テーブルで 'BaseModel' idを参照して、追加のプロパティを格納します。私は間違っているかもしれない、私は知らない – Carondimonio

関連する問題