我正在尝试制作新闻Feed页面,但在此页面中,我需要输出按日期排序的articles
,并且它们必须属于用户,authed用户也会如此。我尝试了一些事情而不是意识到我的逻辑错误。所以在user model
我有:
function followers()
{
return $this->belongsToMany('App\User', 'followers', 'user_id', 'follower_id');
}
function follows()
{
return $this->belongsToMany('App\User', 'followers', 'follower_id', 'user_id');
}
function articles(){
return $this->hasMany('App\Article');
}
而不是article
我有关系:
public function user()
{
return $this->belongsTo('App\User');
}
我不知道我是否可以简单地获取所有文章而不是输出用户遵循的文章。我有点困惑。
这是我在控制器中使用的代码:
$followinguserarticle = Article::whereHas('user.follows', function($q) {
$q->where('id', auth()->id());
})
->latest()
->get();
而不是我尝试用以下方式遍历它们:
@foreach($followinguserarticle as $followinguserarticles)
<a>followinguserarticles->title</a>
@endforeach
答案 0 :(得分:1)
使用whereHas()
:
Article::whereHas('user.followers', function($q) {
$q->where('id', auth()->id());
})
->latest()
->get();
答案 1 :(得分:1)
您可以 authed 用户实例急切加载关系
$authed = Auth::user();
$authed ->load('follows.articles');
现在您有用户关注的用户文章
foreach($authed->follows as $follow){
foreach($follow->articles as $article){
//Now you have access to each article
}
}
答案 2 :(得分:0)
所以我找到的解决方案是这样的:
//get list of follower ids
$follows = Auth::user()->follows->pluck('id');
//get articles of those that user follows
$articles = Article::whereIn('user_id',$follows)
->with('user')
->latest()
->limit(10)
->get();