我想分页以下关系(包含许多应用的类别):
class Category extends Model
{
public function apps()
{
return $this->hasMany('App\App')->orderBy('current_price', 'asc');
}
}
问题是,当我将->paginate(10);
添加到该行的末尾时,我收到以下错误:
关系方法必须返回一个类型的对象 照亮\数据库\锋\关系\关系
我在这里缺少什么?
答案 0 :(得分:13)
你试过这个吗?
$category = Category::first();
$apps = $category->apps()->paginate(10);
return view('example', compact('category', 'apps'));
然后,在您的视图中,您可以循环浏览应用程序。
@foreach ($apps as $app)
{{ $app->id }}
@endforeach
{!! $apps->render() !!}
如果要将其设置为与类别的关系,可以使用setRelation
方法:
$category = Category::first();
$category->setRelation('apps', $category->apps()->paginate(10));
return view('example', compact('category');
然后在你看来:
@foreach ($category->apps as $app)
{{ $app->id }}
@endforeach
{!! $category->apps->render() !!}
答案 1 :(得分:1)
为了让这个工作,我不得不绕过雄辩的关系。我改为创建了一个存储库。
在此示例中,用户有很多报告。
应用\库\ ReportsRepository 强>
这将获取用户的报告记录。
namespace App\Repositories;
use App\User;
class ReportsRepository
{
public function findByUser(User $user, $paginate = 10)
{
$reports = User::find($user->id)
->reports()
->orderBy('created_at', 'DESC')
->paginate($paginate);
return $reports;
}
}
<强> ReportController 强>
我们在这里调用ReportsRepositroy来获取记录(我已删除了Auth代码)。
class ReportController extends Controller
{
public function index(\App\Repositories\ReportsRepository $repo)
{
$reports = $repo->findByUser(Auth::user());
return view('report.index', ['reports' => $reports]);
}
}
查看 - report / index.blade.php
这里分页的重要部分是 {!! $ reports-&gt; render()!!} 。这会生成分页的链接。
@extends('layout.master')
@section('content')
<div class="content">
<h1>Reports</h1>
@if ($reports->count())
<table class="table">
<thead>
<tr>
<th>Status</th>
<th>Info</th>
<th>Date</th>
</tr>
</thead>
<tbody>
@foreach($reports as $report)
<tr class="{{ $report['status'] }}">
<td>{{ $report['status'] }}</td>
<td>{{ $report['info'] }}</td>
<td>{{ $report['created_at'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@else
<p>No records exist.</p>
@endif
{!! $reports->render() !!}
</div>
@stop
这就是所需要的。 Laravel处理其他的分页魔法本身。
希望这有帮助。