Laravel 8中修改分页数据后如何在Blade中渲染分页链接
问题根源
你调用paginate()方法返回的是Illuminate\Pagination\LengthAwarePaginator实例,自带links()等分页相关方法;但你后续用collect()将其转换为了普通的Illuminate\Support\Collection实例,自然丢失了分页相关方法,所以触发了异常。
解决方案
你的需求不需要修改现有分页逻辑,分页元信息(总条数、当前页、每页条数)在调用paginate()时就已经生成,后续对当前页数据做分组、格式转换不会影响分页逻辑,只需要保留原始分页实例用于渲染分页链接即可。
修改后控制器代码
$transactionsByLastMonth = Transaction::where('created_at', '>=', Carbon::now()->subDays(30)->toDateTimeString()) ->where('user_id', Auth::user()->id) ->with(['user', 'propertyFrom', 'propertyTo', 'paddockFrom', 'paddockTo', 'cattleTypeFrom', 'cattleTypeTo']) ->paginate(10); // 仅对当前页的数据集做Resource转换、排序、分组处理,不修改原始分页实例 $transactionsByDays = collect(TransactionResource::collection($transactionsByLastMonth)) ->sortByDesc('created_at') ->groupBy(function($date) { return Carbon::parse($date['created_at'])->format('d'); }); // 同时将原始分页实例和处理后的分组数据传给视图 return view('user.reports.index', compact('transactionsByDays', 'transactionsByLastMonth'));
Blade视图调用代码
{{-- 遍历按天分组的交易数据渲染业务内容 --}} @foreach($transactionsByDays as $day => $transactions) <h4>{{ $day }} 日交易记录</h4> @foreach($transactions as $transaction) {{-- 此处渲染单条交易的业务字段 --}} @endforeach @endforeach {{-- 直接用原始分页实例渲染分页链接 --}} {{ $transactionsByLastMonth->links() }}
内容的提问来源于stack exchange,提问作者Dmitry_allread_return
相关产品推荐
相关产品推荐

