假设我有一个网球运动员模型,并且每个球员都有一个他们与双打比赛相关的配偶。我如何在Eloquent中定义这种关系?我习惯了文档中的常见场景(并且在许多代码库中看到了相同的内容),其中一对一关系指向另一个表中的条目,这使得它直接放在hasOne()
的位置和belongsTo()
。
玩家只能有一个配偶加上没有两个玩家共享同一个配偶,并且他们的关系由mate_id
字段中的值决定。理想情况下,我想要$player->mate
来获得配偶。
那么我将在Player模型中添加mate()
方法的内容是什么,以满足hasOne()
和belongsTo()
shown in the docs的要求?感谢
答案 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()