Laravel5 原生 sql 实现分页

本文介绍在Laravel中如何使用原生SQL配合paginate()方法实现分页,通过实例展示了将复杂SQL语句转化为可分页查询的过程,适用于那些ORM或查询构造器难以处理的情况。

Laravel 的分页文档中并没有指出如何让原生 sql 支付 paginate() 方法,在简单的 sql 语句中可以使用 ORM 或是查询构造器,比如

 User::leftJoin('department', 'users.department_ids','=', 'department.id')
                ->select('users.*','department.name as departmentName')
                ->orderBy('number', 'asc')
                ->paginate(env('PAGE_SIZE'));

但是对于复杂的 sql 语句,比如

ORM 或是查询构造器不一定好用,对于这种情况,原生 sql 似乎更方便.但是如何让原生 sql 支持 paginate() 方法呢?

可以使用如下方法

 $sql = "(select g.*,cate.name as cate_name,ware.name as warehouse_name from goods as g,category as cate,warehouse as ware
where g.status = 0 and g.category_id = cate.id and g.warehouse_id = ware.id order by g.id desc) as cc";

 $goods = DB::table(DB::raw($sql))->paginate(env('PAGE_SIZE'));

 注意将原生 sql 字符串用括号 () 括起来,起一个别名作为一张临时表,不然会出错.

 

参考

https://www.jianshu.com/p/3a53c2fc57d0

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值