Laravel - belongsToMany有多个表

时间:2017-04-02 13:08:38

标签: laravel laravel-5

我创建了3个数据库表:

用户  - ID  - 用户名   - ......

讯息  - ID   - 标题   - 消息

messages_user   - messages_id  - 用户身份   - receive_user_id

messages_user 中的字段设置为相应表的外键。

我想要的功能是: 我希望获得用户的所有消息,无论是他自己创建的还是刚收到的消息。

现状: 通过使用我的用户模型内部,我能够获得用户创建的所有消息:

return $this->belongsToMany('App\Messages', 'messages_user');

我目前的问题是,我无法通过一个查询获得收到的消息。我可以开始第二个查询,但我确信他们是以另一种方式实现这一目标的方式。

这是可能的,如果,如何? :)

提前致谢!

1 个答案:

答案 0 :(得分:0)

请试试这个

模型users.php

class Users extends Model    {
   // Relation with messages_user table
      public function messages_user() {
         return $this->hasMany('App\Messages_user','id');
      }
}

模型messages.php

class Messages extends Model    {
   // Relation with messages_user table
      public function messages_user() {
         return $this->hasMany('App\Messages_user','id');
      }
}

模型messages_user.php

 class Messages_user extends Model    {
   // Relation with users table
      public function send_user() {
         return $this->belongsTo('App\Users','user_id');
      }

      public function receive_user() {
         return $this->belongsTo('App\Users','receive_user_id');
      }
     // Relation with messages table
      public function messages() {
         return $this->belongsTo('App\Messages','messages_id');
      }

}

在控制器中

   public function user_all_messages($id) {
      $data = Messages_user::with('send_user)->with('receive_user')where('user_id',$id)->orWhere('receive_user_id',$id)->get();
   }