Laravel中的模型关系

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中设置这种关

我有2个控制器和型号:

  • 用户控制器:(模型关系:
    $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)
    ,如果英雄已经存在。