显示用户通过Laravel关系关注的用户帖子

时间:2016-09-01 16:04:37

标签: php mysql laravel eloquent laravel-5.2

我想显示当前用户关注的每个人的帖子,按日期desc排序。

我有很多关系,为用户所关注的所有人提供服务。

$users = User::find(Auth::user()->id)->follow()->get();

我有一对多关系显示任何用户的帖子。

$updates = App\User::find(?????)->updates()->orderBy('created_at', 'desc')->get();

问号标记显示了关注者ID的位置。

我可以将上面的查询放在for循环中,但这显然是通过每个关注者而不是按日期顺序的所有帖子。

我怀疑我可能需要建立一种新的关系并从一开始就开始工作。任何人都可以建议。

用户模型

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

/**
 * User following relationship
 */
 // Get all users we are following
public function follow()
{
  return $this->belongsToMany('App\User', 'user_follows', 'user_id', 'follow_id')->withTimestamps()->withPivot('id');;;
}
// This function allows us to get a list of users following us
public function followers()
{
  return $this->belongsToMany('App\User', 'user_follows', 'follow_id', 'user_id')->withTimestamps();;
}

}

更新模型

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

谢谢。

1 个答案:

答案 0 :(得分:2)

由于您需要这些帖子,因此可能更容易在Post模型上启动查询,然后根据其关系过滤帖子。

假设您的Post模型与创建帖子的authorUser关系,User与所有follower的关系User跟随它的{1}},你可以这样做:

$userId = Auth::user()->id;
$posts = \App\Post::whereHas('author.follower', function ($q) use ($userId) {
        return $q->where('id', $userId);
    })
    ->latest() // built in helper method for orderBy('created_at', 'desc')
    ->get();

现在,$posts将是由经过身份验证的用户跟踪的用户创作的Post模型的集合。