Laravel代码片段二

380 阅读1分钟

#1 Collection或Array自定义分页

namespace App\Http\Traits;

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;

trait CollectionPaginate {
    /**
     * collect 或 array的分页
     *
     * @param array|Collection      $items
     * @param int   $perPage
     * @param int  $page
     * @param array $options
     *
     * @return LengthAwarePaginator
     */
    public function paginate($items, $perPage = 15, $page = null, $options = [])
    {
        $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

        if (!array_key_exists('path', $options)) {
            $options['path'] = Paginator::resolveCurrentPath();
        }

        $items = $items instanceof Collection ? $items : Collection::make($items);

        return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
    }
}
use CollectionPaginate;
//...其他代码
//生成分页
$hotels = $this->paginate($hotels, 10);
//翻页的时候保留参数
$hotels->appends(['city_id' => $city_id, 'city_name' => $city_name, 'date_range' => $date_range]);
//...其他代码