Laravel 使用2个主键建立一对多关系

Laravel 使用2个主键建立一对多关系,laravel,eloquent,model,relationship,eager-loading,Laravel,Eloquent,Model,Relationship,Eager Loading,我有两张桌子 1.用户表 id name ... 聊天桌 现在,我试图建立一对多关系,其中用户有许多聊天信息,但一条聊天信息有两个用户从和到用户 如何定义这种关系?。我得把它装起来 我试着用,但没用。 我的代码 用户模型 public function chats() { return $this->hasMany(Chat::class, ['from_id', 'to_id'], 'id'); } 聊天模型 public function user(

我有两张桌子 1.用户表

    id
    name
    ...
  • 聊天桌
  • 现在,我试图建立一对多关系,其中用户有许多聊天信息,但一条聊天信息有两个用户和到用户

    如何定义这种关系?。我得把它装起来

    我试着用,但没用。 我的代码

    用户模型

    public function chats() {
        return $this->hasMany(Chat::class, ['from_id', 'to_id'], 'id');
    }
    
    聊天模型

    public function user() {
        return $this->belongsTo(User::class, ['from_id', 'to_id'], 'id');
    }
    

    谢谢你为什么不那样做呢

    在用户模型上,设置如下两种关系:

    public function chatsFrom() {
        return $this->hasMany('App\Chat', 'from_id');
    }
    
    public function chatsTo() {
        return $this->hasMany('App\Chat', 'to_id');
    }
    
    $user->chatsFrom();
    $user->chatsTo();
    
    $chat->fromUser();
    $chat->toUser();
    
    然后,在您的聊天模型上,还设置了两个关系,一个到
    from
    ,另一个到
    to
    ,两者都引用了用户模型。像这样:

    public function fromUser() {
        return $this->belongsTo('App\User', 'from_id');
    }
    
    public function toUser() {
      return $this->belongsTo('App\User', 'to_id');
    }
    
    通过这种方式,您可以使用以下内容访问关系:

    public function chatsFrom() {
        return $this->hasMany('App\Chat', 'from_id');
    }
    
    public function chatsTo() {
        return $this->hasMany('App\Chat', 'to_id');
    }
    
    $user->chatsFrom();
    $user->chatsTo();
    
    $chat->fromUser();
    $chat->toUser();
    

    让我知道这是否对您有帮助。

    请尝试通过一些字符让其他人了解您所做的事情以及这是如何工作的。我考虑过这一点,但我想做一些事情,如
    $user->chats()->delete()
    这一点。@APu但是如果您在一次聊天中有不同的用户在
    上从
    ,您就不能这样做。除非你愿意删除有不同用户的帖子。
    public function chats() {
      return $this->hasMany(Chat::class, 'from_id', 'id') + $this->hasMany(Chat::class,'to_id','id');
    }
    
    public function userFrom() {
      return $this->belongsTo(User::class, 'from_id', 'id');
    }
    
    public function userTo() {
      return $this->belongsTo(User::class, 'to_id', 'id');
    }