php - Laravel 遍历查询结果,然后分页

标签 php laravel pagination

我正在开发一个事件预订系统。当用户搜索日期范围时,我在 Event 模型中使用一个函数来检查该事件是否可用。我的搜索功能目前的工作方式如下:

    $events = Event::where('name', 'LIKE', '%' . $request->get('term') . '%')
        ->where('accepted',1)
        ->orWhere('description', 'LIKE', '%'.$request->get('term').'%')
        ->orWhere('city', 'LIKE', '%'.$request->get('term').'%')->paginate(15);

    $availableEvents = new Collection();

    if ($request->get('from') !== '' AND $request->get('to') !== '') {
        foreach($events as $key => $event) {
            if ($event->is_available($request->get('from'), $request->get('to'))) {
                $availableEvents->add($event);
            }
        }
    }
    else {
        $availableEvents = $events;
    }

    return view('frontend.events.results', ['events' => $availableEvents, 'request' => $request]);

我无法在查询构建器中检查可用性,因此我必须循环遍历。我正在使用 Illuminate\Database\Eloquent\Collection,因为我无法从查询构建器获得的分页内容中删除事件。

有什么方法可以将 Eloquent Collection 转换为分页集合吗?

提前致谢!

附言我将 $request 传递给 View 以使用 appends(),这样我就可以在分页期间保留查询字符串参数。

编辑:is_available 函数

public function is_available($from, $to) {

    $from = Carbon::createFromFormat('d-m-Y', $from);
    $to = Carbon::createFromFormat('d-m-Y', $to);

    foreach($this->not_availables as $notAvailable) {

        $notAvailableFrom = Carbon::createFromFormat('Y-m-d', $notAvailable->from);
        $notAvailableTo = Carbon::createFromFormat('Y-m-d', $notAvailable->to);

        if ($from->gte($notAvailableFrom) OR $to->lte($notAvailableTo)) {
            return false;
        }
    }

    return true;
}

最佳答案

您可以手动创建一个 paginator

您可以像这样使用 Illuminate\Pagination\LengthAwarePaginator:

use \Illuminate\Pagination\LengthAwarePaginator;

...

$page = $request->get('page', 1);
$limit = 10;
$paginator = new LengthAwarePaginator(
    $availableEvents->forPage($page, $limit), $availableEvents->count(), $limit, $page, ['path' => $request->path()]
);

然后将 $paginator 与您的 View 一起传递,而不是您的 $availableEvents。在您看来,您仍然有 $events,您可以使用 $events->render(); 呈现分页,并从 $request< 传递路由参数 像往常一样。

关于php - Laravel 遍历查询结果,然后分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141883/

相关文章:

转义文字 <?php 和 <?在 PHP 脚本中

php - ID 的唯一性

javascript - 构建自动建议文本框时 PHP 和 Javascript 出现问题

php - Laravel如何在错误填写表单字段时引发单个错误

javascript - DataTables:按回车键以对文本框使用分页

performance - MongoDB 范围分页

php - 删除 PHP 多维数组中的父项

php - 通过 Blade 分页传递变量

css - 缓存在 SASS 文件中链接的破坏图像

php - cakePHP 分页和 passedArgs