如何将指定MySQL查询转换为Laravel查询构造器语句?
将MySQL查询转换为Laravel查询构造器写法
没问题,我帮你把这条原生MySQL查询转换成Laravel查询构造器的写法,两种风格供你选择,都能实现完全一致的功能:
写法一:拆分字段使用DB::raw()
这种写法在需要单独调整某一个字段的时候更灵活:
use Illuminate\Support\Facades\DB; $apartmentViews = DB::table('views') ->select( 'apartment_id', DB::raw('COUNT(created_at) AS n_view'), DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d') AS day_view") ) ->where('apartment_id', 36) ->groupBy('day_view') ->orderByDesc('n_view') ->get();
写法二:使用selectRaw()简化代码
如果不需要单独调整字段,用selectRaw()直接写完整的选择语句会更简洁:
use Illuminate\Support\Facades\DB; $apartmentViews = DB::table('views') ->selectRaw("apartment_id, COUNT(created_at) AS n_view, DATE_FORMAT(created_at, '%Y-%m-%d') AS day_view") ->where('apartment_id', 36) ->groupBy('day_view') ->orderByDesc('n_view') ->get();
补充说明
- 两种写法的执行结果完全一致,都对应你提供的原生SQL逻辑
orderByDesc('n_view')等价于原生SQL里的ORDER BY COUNT(created_at) DESC,利用别名让代码更易读- 如果你的项目里有对应的Eloquent模型(比如
View模型),可以把DB::table('views')替换成View::query(),更贴合Laravel的Eloquent风格
内容的提问来源于stack exchange,提问作者folipso
相关产品推荐
相关产品推荐

