必要なことはPolymorphic Relationsで行うことができますが、関係について必要な情報を Eloquent に提供するためにモデルを作成する必要があります。Item
あなたが言ったように、あなたが's よりも 's' などの追加情報を持つことができると仮定するとScore
、代わりに 's' を持つことができますSubItem
。
以下に示すように、これらのモデルを定義する必要があります。
class Item extends Eloquent
{
public function extrainfo()
{
return $this->morphTo();
}
}
class Score extends Eloquent
{
public function items()
{
return $this->morphMany('Item', 'extrainfo');
}
}
class SubItem extends Eloquent
{
public function items()
{
return $this->morphMany('Item', 'extrainfo');
}
}
次に、次のようなデータベース構造が作成されます。
items
id - integer
name - string
extrainfo_id - integer
extrainfo_type - string
scores
id - integer
score - decimal
sub_items
id - integer
name - string
これにより、必要なことは自動的に行われます。あなたがするとき:
$extrainfo = $item->extrainfo;
モデルのextrainfo
リレーションは、写真を所有するモデルのタイプに応じて、またはインスタンスItem
を返します。そのタイプは、データベース テーブルで定義されます。Score
SubItem
注: これはやり過ぎではありません。Eloquent にリレーションの処理方法を伝えるために提供されるメタ情報であることがわかります。