Laravel 3 个模型之间的关系(组、成员、post)
Laravel relationship between 3 models (group,member,post)
我有 3 个相互关联的模型。
- 组
- 群组成员
- 群发
- 群发评论
现在,我也分离了数据库表。
- 组
- group_members
- group_posts
- 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。
问题:一个用户可以是多个组的成员吗?如果答案是肯定的,那么 Group
和 User
(成员)之间存在多对多关系。因此,像这样更新您的 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_id
和 member_id
组成的组合键,分别代表 groups
和 users
table.
2。如何获取属于特定组
中成员的所有post
首先,GroupPost
(post) 属于两个实体:Group
和 User
(成员)。在您的 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');
}
我有 3 个相互关联的模型。
- 组
- 群组成员
- 群发
- 群发评论
现在,我也分离了数据库表。
- 组
- group_members
- group_posts
- 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。
问题:一个用户可以是多个组的成员吗?如果答案是肯定的,那么 Group
和 User
(成员)之间存在多对多关系。因此,像这样更新您的 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_id
和 member_id
组成的组合键,分别代表 groups
和 users
table.
2。如何获取属于特定组
中成员的所有post首先,GroupPost
(post) 属于两个实体:Group
和 User
(成员)。在您的 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');
}