0

我正在 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。

我该如何解决这种情况?原则上这是一个坏主意吗?

4

1 回答 1

0

您不能也不应该这样做,因为peculiar_items它是它自己的表。

话虽如此,在您的 Eloquent 模型中,您可以使用->has_one->has_many->belongs_to方法设置关系。从那里,您就可以使用Item::find()->peculiar_item()->first()->someSpecialProperty,等等...(未经测试)。

因为我一直在使用 L4,所以我很难记住 L3 的设置 - 他们使用蛇盒。看看这个:http ://three.laravel.com/docs/database/eloquent#relationships

于 2013-07-02T15:29:27.130 回答