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

时间:2016-02-09 08:11:33

标签: php laravel laravel-5 laravel-5.2

假设我有一个网球运动员模型,并且每个球员都有一个他们与双打比赛相关的配偶。我如何在Eloquent中定义这种关系?我习惯了文档中的常见场景(并且在许多代码库中看到了相同的内容),其中一对一关系指向另一个表中的条目,这使得它直接放在hasOne()的位置和belongsTo()

玩家只能有一个配偶加上没有两个玩家共享同一个配偶,并且他们的关系由mate_id字段中的值决定。理想情况下,我想要$player->mate来获得配偶。

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

3 个答案:

答案 0 :(得分:2)

不会有一个关系在这里工作吗?

在你的模特中尝试这个

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

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

答案 1 :(得分:1)

你需要制作新表,可以称之为#34; mate"。

伴侣

ID

player_id(唯一,非空)

player_id(唯一,非空)

然后将它们与玩家表与belongsToMany()配对。

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

答案 2 :(得分:0)

当我只定义Game.where(["start_date > ?", Time.now]) 时,我想要的一对一工作,如果我在其他答案中使用belongsTo(),它就无法工作。

hasOne()