Laravel 将 SQL 转换为 Eloquent:按 sum() 排序

Posted

技术标签:

【中文标题】Laravel 将 SQL 转换为 Eloquent:按 sum() 排序【英文标题】:Laravel Convert SQL to Eloquent : order by a sum() 【发布时间】:2021-11-01 05:24:50 【问题描述】:

我是 Eloquent 和 Laravel 的新手。我尝试了多种语法,但我找不到让它工作的方法。这是我要转换的查询:

SELECT category, SUM(amount) AS `total_cat` FROM expenses GROUP BY category ORDER BY `total_cat` DESC

这是我的“费用”表模型:

class Expense extends Model

    use HasFactory;
    protected $fillable = ['date', 'title', 'amount', 'category'];


这里的想法是获取每个类别的费用总和(别名不是必需的)。该查询在纯 php 中运行良好。感谢您的帮助:)

【问题讨论】:

【参考方案1】:

这是解决我最初的问题的方法:

Expense::select([
            'category',
            DB::raw('SUM(amount) AS total_cat') ])
            ->groupBy('category')
            ->orderBy('total_cat', 'desc')
            ->get(); 

【讨论】:

【参考方案2】:

这可能是解决方案,我没有测试,但它似乎符合雄辩函数中的理论

Expense::select([
  'category',
  DB::raw('SUM(category) AS category_sum')
])
  ->groupBy('category')
  ->orderBy('total_cat', 'desc')
  ->get()

【讨论】:

我明白了:“找不到错误类'App\Http\Controllers\DB'” 在文件顶部,包括use Illuminate\Support\Facades\DB; 嗨@outik,如果你发现这个解决方案有效,你能帮我投票给我的答案吗~? 会的!我已经改变了一些东西并且它起作用了。再次感谢您的帮助

以上是关于Laravel 将 SQL 转换为 Eloquent:按 sum() 排序的主要内容,如果未能解决你的问题,请参考以下文章

将 PHP SQL 转换为 Laravel 查询构建器 [重复]

如何将 sql 转换为查询生成器 laravel

如何将复杂的 sql 查询转换为 laravel Eloquent

Laravel 将 SQL 转换为 Eloquent:按 sum() 排序

如何将此sql语句转换为laravel orm?

如何将此 SQL 转换为 Laravel Query Builder 查询?