【问题标题】:Laravel BelongsToMany table relationLaravel BelongsToMany 表关系
【发布时间】:2015-02-22 10:50:50
【问题描述】:

我有一个问题,我无法通过文档自行解决。

我想在两个用户之间创建一个非常简单的对话系统。

我有 3 个模型和表格:

用户
身份证、姓名

对话
身份证

留言
id , user_id , conversation_id , 内容

所以一条消息属于一个用户和一个对话,但我希望对话属于多个用户。

而且我不知道如何用桌子制作这个。如果我在对话表中创建一个user_id 字段,我就不能有多个用户......

【问题讨论】:

    标签: laravel orm eloquent


    【解决方案1】:

    This is definitely in the documentation

    无论如何。您正在寻找多对多关系。为此,您需要一个包含用户 ID 和对话 ID 的数据透视表(或联结表)。

    按照 Laravel 约定,此表将被称为 conversation_user,并包含 id(主键)、conversation_iduser_id

    如果你有,你可以像这样定义关系:

    用户

    public function conversations(){
       return $this->belongsToMany('Conversation');
    }
    

    对话

    public function users(){
       return $this->belongsToMany('User');
    }
    

    查询关系

    $user = User::find(1);
    $conversations = $user->conversations;
    

    正如记录的 here 将模型插入到多对多关系中,您应该使用 attach()

    $conversation = new Conversation;
    $conversation->users()->attach($idUser1);
    $conversation->users()->attach($idUser2);
    
    // or just pass an array of ids
    
    $conversation->users()->attach(array($idUser1, $idUser2));
    

    【讨论】:

      【解决方案2】:

      我首先要有三个 folowig 表:

      用户

      身份证、姓名

      Conversation_user

      user_id , message_id

      留言

      id , 内容

      让我们处理好人际关系吧。

      在您的用户模型中:

      public function conversations()
      {
          return $this->belongsToMany(Message::class,'conversation_user','user_id','message_id');
      }
      

      在您的消息模型中:

      public function users()
      {
          return $this->belongsToMany(User::class,'conversation_user','message_id','user_id');
      }
      

      现在您可以像这样调用关系:

      $user = Auth::user();
      $user->conversations();
      

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2018-05-19
        • 2018-03-08
        • 2021-03-22
        • 2021-10-17
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多