Laravel 3 个模型之间的关系(组、成员、post)

Laravel relationship between 3 models (group,member,post)

我有 3 个相互关联的模型。

  1. 群组成员
  2. 群发
  3. 群发评论

现在,我也分离了数据库表。

  1. group_members
  2. group_posts
  3. group_post_comments

对于成员所属的每个组,我在 group_members 中插入一个新行。 这里的外键是"group_id",与组中的id字段有关。 在 group_posts 中,每个 post posted 都有一个新行。此容器还有一个 group_id 字段。

我遇到的问题是 GroupMember 模型。 我如何从这个 GroupMember 中获取所有 posts 的集合,该 GroupMember posted 在与其相关的那个组中?

这是我的模型设置。

群模型

public function category() {
    return $this -> belongsTo('App\GroupCategory', 'category_id');
}

public function owner() {
    return $this -> hasOne('App\GroupMember', 'group_id') -> where('owner', true);
}

public function mods() {
    return $this -> hasMany('App\GroupMember', 'group_id') -> where('mod', true);
}

public function admins() {
    return $this -> hasMany('App\GroupMember', 'group_id') -> where('admin', true);
}

public function members() {
    return $this -> hasMany('App\GroupMember', 'group_id');
}

public function posts() {
    return $this -> hasMany('App\GroupPost', 'group_id');
}

public function comments() {
    return $this -> hasMany('App\GroupPostComment', 'group_id');
}

群组成员模型

public function group() {
    return $this -> belongsTo('App\Group');
}

public function posts() {
    return $this -> hasMany('App\GroupPost', 'group_id', 'group_id');
}

public function comments() {
    return $this -> hasMany('App\GroupPostComment', 'group_id', 'group_id');
}

public function user() {
    return $this -> belongsTo('App\User');
}

GroupPost 模型

public function user() {
    return $this -> belongsTo('App\User');
}

public function comments() {
    return $this -> hasMany('App\GroupPostComment', 'post_id');
}

public function group() {
    return $this -> belongsTo('App\Group');
}

问题是 GroupMember 模型和 posts() / comments() 方法。 我的关系有错误,但我看不出我做错了什么。

有人看到我做错了什么吗?

虽然很容易解决,但这个案例有点难以解决。我想这就是为什么你还没有得到任何帮助的原因,因为有些人很难理解。

1.清除一些困惑

你在标题中提到了

Laravel relationship between 3 models (group,member,post)

然而,没有 Member 模型可以看到。我认为你的大部分困难都来自那里。在我的试用中,我将假设您有一个 User 模型和与之配套的 table。

问题:一个用户可以是多个组的成员吗?如果答案是肯定的,那么 GroupUser(成员)之间存在多对多关系。因此,像这样更新您的 Group 模型:

public function members() {
    return $this->belongsToMany('App\User', 'group_members', 'group_id', 'member_id');
}

而在User模型中,你定义相反

public function groups() {
    return $this->belongsToMany('App\Group', 'group_members', 'member_id', 'group_id');
}

对了,你现在注意到了 group_members table 有一个由 group_idmember_id 组成的组合键,分别代表 groupsusers table.

2。如何获取属于特定组

中成员的所有post

首先,GroupPost (post) 属于两个实体:GroupUser(成员)。在您的 GroupPost 模型中,您已经与 User 建立了关系。所以一切都很好。要回答你的问题,有很多种可能。

//Direct eloquent when user id and group id are known
$posts = GroupPost::where('user_id', 1)->where('group_id', 1)->get();

//Directly from the user 
$member = User::find(1);
$posts = $member->groupPosts()->where('group_id', 1)->get();

不要忘记在 User 模型中定义 groupPosts() 关系

public function groupPosts() {
    return $this->hasMany('App\GroupPost');
}