私はLaravel 3で簡単なアプリを書いています.ItemとPeculiarItemの2つのモデルがあります。
PeculiarItem は、追加のフィールド (「色」、「価格」など) を追加するだけでアイテムを「拡張」する必要があります。
アイデアは、「コア」クラスのアイテムを共通のもの (「優先度」や「タイトル」など) に保持し、それぞれ独自のフィールドのセットを持つさまざまな種類のアイテムに拡張することができるということです。
class Item extends Eloquent
{
// Just a simple model with a couple relationship with other models, such as Page, Collection
public static $table = 'items';
public function page()
{
return $this->belongs_to('Page');
}
public function collection()
{
return $this->belongs_to('Collection');
}
}
// ...
class PeculiarItem extends Item
{
public static $table = 'peculiar_items';
// Ideally this PeculiarItem needn't redeclare the page_id and collection_id foreign key fields
// because it extends Item.
}
問題は、私の PeculiarItem オブジェクトで save() メソッドを呼び出すときに ORM が配線されている方法に起因します。
// ...
class Item_Controller extends Base_Controller
{
/**
* @param $type the class name of the object we are creating
* @param $data the data for the new object
* @return mixed
*/
public function action_create($type = null, $data = null)
{
// ... filter, validate data, etc.
$entry = new $type($data);
$entry->save();
}
}
// ...
POST リクエストの例: item/create/peculiaitem
データ: page_id = 1、collection_id = 1、タイトル = 'Foo'、...
PeculiarItem にはフィールド page_id または collection_id がないため、これは失敗します。
どうすればこの状況を回避できますか? 原理的にダメですか?