Eloquent:如何在同一模型上定义一对一关系

3
假设我有一个网球选手模型,每个选手都有一个双打比赛配对的伙伴。我应该如何在 Eloquent 中定义这种关系?通常情况下,文档中的一对一关系指向另一个表中的条目,这使得在哪里放置 hasOne() 和 belongsTo() 更加直观。
每个选手只能有一个配对伙伴,并且没有两个选手共享相同的伙伴,他们的关系由 mate_id 字段中的值确定。因此,理想情况下,我想使用 $player->mate 来获取配对伙伴。
那么,在 Player 模型上添加的 mate() 方法中需要什么内容来满足文档中所示的 hasOne() 和 belongsTo() 的要求呢?谢谢。
3个回答

2

这里适用hasOne关系吗?

在您的模型中尝试此操作

public function mate()
{
        return $this->hasOne('Player', 'mate_id');
}

我认为我们不需要反向关系,因为在任何一个玩家上执行$player->mate()将会给出另一个玩家。


那么我们应该在哪里定义belongsTo()呢? - undefined
正如我在答案中提到的,我认为我们不需要一个反向关系,即belongsTo不是必需的。这是否适用? - undefined
让我试试看。昨天没成功,但可能是因为其他原因,因为我那时在调整迁移。很快会告诉你。谢谢。 - undefined
没成功。它需要 belongsTo()。谢谢帮忙。 - undefined

2
当我只定义 belongsTo() 时,我希望的一对一关系可以正常工作,但如果我像其他答案中使用 hasOne(),它将无法正常工作。
public function mate()
{
    return $this->belongsTo('App\Player', 'mate_id');
}

1
你需要创建一个新的表,可能称为“mate”。
mate id player_id(唯一,非空) player_id(唯一,非空)
然后使用belongsToMany()从Players表中将它们配对。
唯一约束表示一个Player不能在多个配对中。

嗯,我猜那是最后的选择了(无意冒犯)。只是试试你的方法,有结果会告诉你。谢谢 Siim。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接