版权声明:欢迎转评,一起学习. https://blog.csdn.net/xiaobinqt/article/details/84101197
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 字符串用括号 () 括起来,起一个别名作为一张临时表,不然会出错.
参考