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

Eloquent: How to define a one-to-one relationship on the same model

假设我有一个网球运动员模型,每个运动员都有一个双打比赛的伙伴。我如何在 Eloquent 中定义这种关系?我已经习惯了文档中的常见场景(并且在许多代码库中看到过相同的场景),其中一对一关系指向另一个 table 中的一个条目,这使得它直接放在哪里 hasOne()belongsTo().

一个玩家只能有一个队友,不能有两个玩家共享同一个队友,他们的关系由mate_id字段中的值决定。所以理想情况下,我想 $player->mate 得到伴侣。

那么我将在 Player 模型上添加的 mate() 方法中的内容是什么,以满足 hasOne()belongsTo() 作为 shown in the docs 的要求?谢谢

您需要制作新的 table,它可能被称为 "mate"。

队友

编号

player_id(唯一,不为空)

player_id(唯一,不为空)

然后你将它们从 Players table 与 belongsToMany() 配对。

唯一约束表示一个玩家不能超过 1 对。

hasOne 关系在这里不起作用吗?

在你的模型中试试这个

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

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

当我只定义 belongsTo() 时,我想要的一对一有效,如果我像其他答案一样使用 hasOne(),它将无效。

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