我正在使用Laravel5.1进行CMS开发。我有一个简单的帖子结构,用户和用户都可以喜欢帖子。
我想列出趋势的帖子(最喜欢的帖子在过去的1周,按顺序排列)。文章和用户有很多-到许多关系,并使用一个支点表的关系。
Posts模型
public function likedby()
{
return $this->belongsToMany('App\Models\User','user_like_post')
->withTimestamps();
}用户模型
public function likes(){
return $this->belongsToMany('App\Models\Post','user_like_post')
->withTimestamps();
}我如何写雄辩的查询,这样我才能收到趋势的帖子。我需要使用枢轴表的时间戳,这是我觉得很难使用的。
这是我尝试过的,但它使用的是“created_at”的帖子表,而不是枢轴表。
$trending = Post::with('likedby')->get()
->sortByDesc(function ($post){
$one_week_ago = Carbon::now()->subWeeks(1);
return $post->likedby
->where('created_at','>=',$one_week_ago)
->count();
}
);发布于 2015-07-09 10:44:59
您可以在with方法中约束一个急切的加载,但是这仍然会加载所有的帖子,但是只有当它不到一个星期的时候才会加载这个类似的关系。这可能不是你想要的行为,但值得一提的是。
Post::with(['likedby' => function($query) {
$query->where('created_at', '>=', Carbon::now()->subWeeks(1));
}])->get();如果只加载上一周内喜欢的帖子,最好使用whereHas方法。这将为你提供一份过去一周内在他们身上贴上喜欢的帖子的列表。
Post::whereHas('likedby', function ($query) {
$query->where('created_at', '>=', Carbon::now()->subWeeks(1));
})->get();https://stackoverflow.com/questions/31314910
复制相似问题