【问题标题】:Laravel relationship between 3 models (group,member,post)3个模型(组,成员,帖子)之间的Laravel关系
【发布时间】:2017-02-12 21:16:02
【问题描述】:

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

  1. 群组成员
  2. 群发帖
  3. GroupPostComment

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

  1. 群组
  2. group_members
  3. group_posts
  4. group_post_cmets

对于每个成员所属的组,我在 group_members 中插入一个新行。 这里的外键是“group_id”,它与组中的 id 字段有关。 在 group_posts 中,每个发布的帖子都有一个新行。这个容器也是一个 group_id 字段。

我正在努力解决的是 GroupMember 模型。 如何从该 GroupMember 中获取所有帖子的集合,该 GroupMember 在与其相关的一个组中发布了这些帖子?

这是我的模型设置。

组模型

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');
}

GroupMember 模型

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() / cmets() 方法。 我的关系有错误,但我看不出我做错了什么。

有人看到我做错了吗?

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案1】:

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

    1.清除一些困惑

    在你提到的标题中

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

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

    问题:一个用户可以是多个组的成员吗?如果答案是肯定的,那么您在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 表有一个由group_idmember_id 组成的组合键,分别代表groupsusers 表。

    2。如何获取属于特定组中成员的所有帖子

    首先,GroupPost(帖子)属于两个实体: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');
    }
    

    【讨论】:

    • 有一个成员模型:“GroupMember”,是的,一个“User”可以是许多“Groups”的“GroupMember”。 “用户”所属的每个“组”都有一个新的“组成员”。我不确定我是否完全理解您所说的没有成员模型是什么意思,但是我会尝试您在答案中提到的一些东西,看看它们是否会起作用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 2016-02-06
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多