首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >趋势查询Laravel

趋势查询Laravel
EN

Stack Overflow用户
提问于 2020-08-24 07:29:27
回答 2查看 151关注 0票数 0

现在,我有一个子查询来获取当月的付款计数,然后获得具有最高payment_count的4个产品。这个查询运行得很好,但我想知道是否有更简单的方法来做同样的事情,因为它变得难以阅读。

代码语言:javascript
复制
$latestPayments = DB::table('payments')
            ->select('product_id', DB::raw('COUNT(*) as payments_count'))
            ->whereMonth('created_at', Carbon::now()->month)
            ->groupBy('product_id');

$trendingProducts = DB::table('products')
             ->joinSub($latestPayments, 'latest_payments', function ($join) {
                 $join->on('products.id', '=', 'latest_payments.product_id');
             })->orderBy('payments_count', 'DESC')->take(4)->get();
EN

回答 2

Stack Overflow用户

发布于 2020-08-24 10:21:04

这就是它!

代码语言:javascript
复制
$trendingProducts = Product::withCount(['payments' => function($query) { 
    $query->whereMonth('created_at', Carbon::now()->month); 
}])->orderBy('payments_count', 'DESC')->take(4)->get(); 
票数 2
EN

Stack Overflow用户

发布于 2020-08-24 08:39:38

如果您正在关系数据库中使用eloquent query,您可以这样做:

代码语言:javascript
复制
$latestPaymentWithTrendingProduct = App\Payment::with(['products', function($product) {
  $product->orderBy('payments_count', 'DESC')->take(4);
}])->whereMonth('created_at', date('m'))->get()->groupBy('product_id');

这将减少代码,但仍然会做同样的事情。

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

https://stackoverflow.com/questions/63552998

复制
相关文章

相似问题

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