Laravel5 原生 sql 實現分頁
阿新 • • 發佈:2018-12-24
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 字串用括號 () 括起來,起一個別名作為一張臨時表,不然會出錯.
參考