【发布时间】:2018-05-08 17:22:11
【问题描述】:
我有一个UserController,它有一个index() 方法,可以让用户用“$congresses = $user->congresses()->get();”组织所有的会议。然后在我展示的视图中,例如 DraftCongresses,即状态栏为“D”的大会,例如:
@foreach($congresses->filter(function ($item) { return $item->draftCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
我希望对此结果进行分页,以便在草稿大会之间导航。默认情况下,我只想显示 5 个代表大会,然后我希望在其他代表大会之间进行分页导航。
我不明白如何使用 laravel paginate() 方法,因为大会是用“$congresses = $user->congresses()->get();”获得的,但是在视图中有不同的foreach,一个用于显示pastCongresses,另一个用于显示publishedCongresses 和其他显示 draftCongresses。
您知道在这种情况下如何为每个 foreach 实现分页吗?因为只有一条路由将用户组织的所有会议返回到视图,然后每个 foreach 在每个选项卡中显示必要的结果。
// 将auth用户组织的所有会议返回给视图的用户控制器
class UserController extends Controller
{
public function index(){
$user = Auth::user();
$congresses = $user->congresses()->get();
return view('users.index', compact('user','registrations', 'congresses', $congresses));
}
}
国会模式:
class Congress extends Model
{
public function pastCongresses(): bool
{
return $this->end_date < now();
}
public function draftCongresses(): bool
{
return $this->status == 'D';
}
public function publishedCongresses(): bool
{
return $this->status == 'P';
}
}
到这个视图的路线:
Route::get('/user/profile', [
'uses' => 'UserController@index',
'as' =>'user.index'
]);
// 具有显示过去的Congresses、draftCongresses 和已发布的Congresses 的选项卡的视图。
<div class="tab-pane clearfix fade" id="myCongresses" role="tabpanel" aria-labelledby="contact-tab">
<div class="d-flex mb-3">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active border" href="#draftCongresses" data-toggle="tab"
role="tab">Draft congresses</a>
</li>
<li class="nav-item">
<a class="nav-link border" href="#publishedCongresses" data-toggle="tab"
role="tab">Published</a>
</li>
<li class="nav-item">
<a class="nav-link border" href="#pastCongresses" data-toggle="tab"
role="tab">Past Congresses</a>
</li>
</ul>
</div>
<div class="tab-content bg-white" id="myTabContent">
<div class="tab-pane fade active show clearfix" id="draftCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->draftCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="tab-pane fade show clearfix" id="publishedCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->publishedCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="tab-pane fade show clearfix" id="pastCongresses" role="tabpanel"
aria-labelledby="home-tab">
<ul class="list-group">
@foreach($congresses->filter(function ($item) { return $item->pastCongresses(); }) as $congress)
<li class="list-group-item">
<p class="font-size-xsm"><i class="fa fa-calendar" aria-hidden="true"></i>
{{$congress->start_date->formatLocalized('%a, %b %d, %Y - %H:%M')}}</p>
<h5 class="card-title">
{{$congress->name}}</h5>
<a href="{{route('congress.manage', ['id' => $congress->id])}}" class="btn btn-outline-primary font-size-sm">Panel</a>
</li>
@endforeach
</ul>
<!-- Pagination div static for now-->
<div class="text-center mt-3">
<div class="col">
<nav aria-label="...">
<ul class="pagination d-flex justify-content-center">
<li class="page-item disabled">
<span class="page-link">Previous</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">2</span>
<span class="sr-only">(current)</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
【问题讨论】: