我想显示当前用户关注的每个人的帖子,按日期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');
}
谢谢。
答案 0 :(得分:2)
由于您需要这些帖子,因此可能更容易在Post
模型上启动查询,然后根据其关系过滤帖子。
假设您的Post
模型与创建帖子的author
有User
关系,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模型的集合。