0

假设我有一个名为 Item 的数据库表(带有名称和类型)。现在根据类型,项目有额外的信息:例如,如果它是一个得分项目,它有一个分数。所以我创建了一个数据库表ItemScore,它为一个项目分配一个分数。

然后我有一个雄辩的模型:Item(带有名称和类型),但是我应该如何添加这个 Score 属性。

一个明显的解决方案是创建一个模型:ItemScore 并设置正确的关系(使用 hasMany 和 belongsTo)。但是因为它只包含一个分数,这似乎有点过分了。

所以问题是:是否有可能以某种方式指定这种关系,以便我可以请求项目的分数(如果有的话)并设置它以便正确保存在数据库中,而不创建这个模型类?

4

1 回答 1

0

你想要的可以用Polymorphic Relations来完成,但是你需要创建模型来向 Eloquent 提供关于关系的必要信息。正如你所说,假设你有Item's than 可以有额外的信息,比如Score或其他任何东西,让它有 aSubItem代替。

您必须定义这些模型,如下所示:

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将返回 aScoreSubItem实例,具体取决于拥有照片的模型类型。该类型是在数据库表上定义的。

注意:这并不过分,您可以将其视为提供的元信息,以告诉 Eloquent 如何处理您的关系。

于 2013-08-31T16:05:31.647 回答