Метод Illuminate \ Support \ Collection :: offset не существует - PullRequest
0 голосов
/ 09 июня 2018

Привет, я пытаюсь разбить свое представление на страницы, и у меня есть следующий код в моем контроллере для разбивки на страницы:

    public function membrevis()
      {
      $filter = isset($_GET['filter']) ? $_GET['filter'] : null;
      $query = DB::table('users')
        ->join('user_role', 'users.id', '=', 'user_role.user_id')
        ->join('roles', 'user_role.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');
        if ($filter != null) {
        $query->where('users.name','like','%'.$filter.'%')
            ->orWhere('roles.description','like','%'.$filter.'%');
        }
     $users = $query->get();


    $itemsPerPage = 8 ;
    $currentPage  = isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ? $_GET['page'] : 1;
    $urlPattern   = '/profilecontroller/membrevis?page=(:num)';
    $totalItems   = $users->count();
    $donner   = $users->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();
    $paginator = new  Paginator( $totalItems, $itemsPerPage, $currentPage, $urlPattern );

return view('membre2',['users'=> $donner,'paginator'=> $paginator]);

Мой view membre2.blade.php также имеет следующий код для разбивки на страницы:

  <form>
 ....
  </form>
 <table>
@foreach($users as $row)
....
@endforeach
 </table>
echo $paginator;

Но я все еще получаю эту ошибку Метод Illuminate \ Support \ Collection :: offset не существует. зная, что я уже установил "jasongrimes / paginator: ~ 1.0" CMD

любая помощь будет оценена!

1 Ответ

0 голосов
/ 09 июня 2018

Подсветка \ Поддержка \ Коллекция :: смещение не существует. это потому, что ваши $ пользователи являются экземплярами Подсветка \ Поддержка \ Коллекция .Для проверки используйте dd (get_class ($ users)); после $ totalItems = $ users-> count (); Должно быть напечатано Illuminate \ Support \ Collection .Экземпляр коллекции имеет метод count, который возвращает Количество элементов коллекции .Для вашего $ users-> offset (($ currentPage - 1) * $ itemsPerPage) -> limit ($ itemsPerPage) -> get () код работает правильно, вы должны изменить $ пользователей на $запрос (может быть $ users) , где $ запрос (может быть $ users) isntance \ Illuminate \ Database \ Query \ Builder .
В этом случае используйте

$query->->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();

Ваш исправленный код -

public function membrevis()
{
    $filter = isset($_GET['filter']) ? $_GET['filter'] : null;
    $query = DB::table('users')
        ->join('user_role', 'users.id', '=', 'user_role.user_id')
        ->join('roles', 'user_role.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');
    if ($filter != null) {
        $query->where('users.name','like','%'.$filter.'%')
            ->orWhere('roles.description','like','%'.$filter.'%');
    }

    $itemsPerPage = 8 ;
    $currentPage  = isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ? $_GET['page'] : 1;
    $urlPattern   = '/profilecontroller/membrevis?page=(:num)';
    $totalItems   = $query->count();
    $donner   = $query->offset( ( $currentPage - 1 ) * $itemsPerPage )->limit( $itemsPerPage )->get();
    $paginator = new  Paginator( $totalItems, $itemsPerPage, $currentPage, $urlPattern );

    return view('membre2',['users'=> $donner,'paginator'=> $paginator]);
}

Я удаляю метод $ users = $ query-> get (), который является еще одним запросом в БД.А для получения общего количества пользователей вы использовали $ totalItems = $ query-> count (); , что является более оптимизированным запросом

...