首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.1 - Trending Posts .关于支点时间戳条件下关系计数的查询

Laravel 5.1 - Trending Posts .关于支点时间戳条件下关系计数的查询
EN

Stack Overflow用户
提问于 2015-07-09 10:33:54
回答 1查看 1K关注 0票数 0

我正在使用Laravel5.1进行CMS开发。我有一个简单的帖子结构,用户和用户都可以喜欢帖子。

我想列出趋势的帖子(最喜欢的帖子在过去的1周,按顺序排列)。文章和用户有很多-到许多关系,并使用一个支点表的关系。

Posts模型

代码语言:javascript
复制
public function likedby()
{
    return $this->belongsToMany('App\Models\User','user_like_post')
        ->withTimestamps();
}

用户模型

代码语言:javascript
复制
public function likes(){
    return $this->belongsToMany('App\Models\Post','user_like_post')
        ->withTimestamps();
}

我如何写雄辩的查询,这样我才能收到趋势的帖子。我需要使用枢轴表的时间戳,这是我觉得很难使用的。

这是我尝试过的,但它使用的是“created_at”的帖子表,而不是枢轴表。

代码语言:javascript
复制
$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();
    }
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 10:44:59

您可以在with方法中约束一个急切的加载,但是这仍然会加载所有的帖子,但是只有当它不到一个星期的时候才会加载这个类似的关系。这可能不是你想要的行为,但值得一提的是。

代码语言:javascript
复制
Post::with(['likedby' => function($query) {

    $query->where('created_at', '>=', Carbon::now()->subWeeks(1));

}])->get();

如果只加载上一周内喜欢的帖子,最好使用whereHas方法。这将为你提供一份过去一周内在他们身上贴上喜欢的帖子的列表。

代码语言:javascript
复制
Post::whereHas('likedby', function ($query) {

    $query->where('created_at', '>=', Carbon::now()->subWeeks(1));

})->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31314910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档