laravel - 如何在数据库原始复杂查询中使用分页
问题描述
请帮助我将 laravel 的 Paginate 类与 DB 原始复杂查询一起使用...
尝试了一些技巧来获得 laravel paginate 的结果,但由于查询的复杂性,它给我带来了问题
$data = DB::select(DB::raw("SELECT DISTINCT c.id, c.name, c.active, c.image, c.created_at, (SELECT COUNT(*) FROM categories WHERE c.id=parent_id) AS subcat_count, (SELECT COUNT(*) FROM post_ads WHERE c.id=cat_id) AS postad_count FROM categories AS c LEFT OUTER JOIN categories AS subc ON c.id = subc.parent_id LEFT OUTER JOIN post_ads AS postadc ON c.id = postadc.cat_id WHERE c.parent_id=0 ORDER BY c.name ASC LIMIT 9"));
解决方案
您可以使用长度感知分页器进行分页,在您的控制器中这样做,
use Illuminate\Pagination\LengthAwarePaginator;
...
class StudentAvailablitiesController extends Controller
{
public function index()
{
$collection = DB::select(DB::raw...)->get();
$paginatedData = $collection->paginate(10);
}
public function paginate($perPage, $total = null, $page = null, $pageName = 'page')
{
$page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);
return new LengthAwarePaginator(
$this->forPage($page, $perPage),
$total ?: $this->count(),
$perPage,
$page,
[
'path' => LengthAwarePaginator::resolveCurrentPath(),
'pageName' => $pageName,
]
);
}
}
推荐阅读
- javascript - 从对象数组中获取键:Javascript
- flutter - Flutter:通过路由保持流活跃?
- windows - 基于 Powershell 的 WMI 命令替换
- couchdb - 就地更新功能得到“500(内部服务器错误)”
- spring - 使用弹簧数据流创建弹簧批处理步骤
- jquery - 更改日期选择器日期格式
- reactjs - 在重新渲染时,父组件的道具被子组件的道具忽略了吗?
- python - 在 pythonanywhere 中卸载模块
- python - 在 Google Keep 中排序笔记 - gkeepapi
- bash - 带有变量 \n 复杂性的 sed