我正在 Laravel 3 中编写一个简单的应用程序,我有 2 个模型:Item 和 PeculiarItem。
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/peculiaritem
数据:page_id = 1,collection_id = 1,title = 'Foo',...
这会失败,因为 PeculiarItem 没有字段 page_id 或 collection_id。
我该如何解决这种情况?原则上这是一个坏主意吗?