Laravel中的模型关系
我有2个控制器和型号:Laravel中的模型关系,laravel,Laravel,我有2个控制器和型号: 用户控制器:(模型关系:$this->hasMany(Hero::Class);) 英雄控制者:每个英雄都有自己的属性,比如名字、力量和生命。 模型关系:($this->belongsTo(User::class);) 每个用户可以拥有多个英雄 这意味着用户ID:1可能有3个英雄:英雄ID 5、20、26。 我的问题是:如何定义这样的关系,让laravel知道如何处理我的user\u heros表? 下图描述了我所说的关系: 如何在我的laravel API中设置这种关
$this->hasMany(Hero::Class);
)$this->belongsTo(User::class);
)用户ID:1
可能有3个英雄:英雄ID 5、20、26。
我的问题是:如何定义这样的关系,让laravel知道如何处理我的user\u heros
表?
下图描述了我所说的关系:
如何在我的laravel API中设置这种关系?如果一个用户可以有许多英雄,并且英雄也可以属于许多用户,那么这是一种多对多关系。在Laravel中,多对多关系的逆关系也是多对多关系,它们都由
belongsToMany()
描述
因此,在您的用户模型中:
public function heros() {
return $this->belongsToMany(Hero::class);
}
在你的英雄模型中:
public function users() {
return $this->belongsToMany(User::class);
}
Laravel将假定联接表名为hero\u user
,两个型号名称(单数)按字母顺序联接。如果要使用图像中的用户英雄
,则需要指定它:
return $this->belongsToMany(Hero::class, 'user_heroes');
(在两种模型方法中)。是的,我的意思是。在我看来,您想要的是一对多的关系,但您的数据库没有反映这种关系。在多对多关系的情况下,需要一个透视表。如果您想建立一对多关系,您需要在
hero
表中有一个user\u id
字段,而不需要透视表。这就是拉威尔希望你为这种关系建立数据库的方式。嗯。。当我考虑它时,一个用户可以拥有多个英雄,但我仍然必须使用“多对多”关系逻辑。我添加了一个图像,以便更能描述我想要达到的目标。虽然一个用户可以拥有多个英雄(这意味着一对多),但我仍然需要使用laravel中的多对多关系吗?多个用户可以拥有同一个英雄吗?用户id 2也可以有英雄id 5吗?是的,他也可以有英雄5@谢谢你的回答。似乎我不得不使用多对多关系。您知道在这种情况下创建新用户英雄(假设用户已登录)的表达式是什么吗?类似于$user->heros()->attach($hero\u id)
,如果英雄已经存在。