Таблица нумерации страниц на Laravel - PullRequest
0 голосов
/ 16 октября 2018

У меня проблемы с разбиением на страницы на laravel.Уже разбит на стол.Но на странице просмотра номера не в порядке. Вот как это выглядит:

https://i.stack.imgur.com/407Oo.png

Другая проблема - когда я нажимаю цифры, ссылки не работают и выдают мне эту ошибку:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Нет сообщения

Это мой маршрут:

Route::get("/", "PagesController@welcome");

Route::post("/search", "PagesController@search")->name('search.route');

И это мое мнение:

public function search(Request $request)
    {
        $q = $request->q;
        if ($q !== null && trim($q) !== ""){//here

            $estates = \DB::table('allestates')
                ->where("building_name","LIKE", "%" . $q . "%")
                ->orWhere("address","LIKE", "%" . $q . "%")
                ->orWhere("company_name","LIKE", "%" . $q . "%")
                ->orWhere("region","LIKE", "%" . $q . "%")
                ->orderBy('price')->paginate(10);


            if(count($estates) > 0){
                return view("search", compact('estates'))->withQuery($q);
            }

        }

        $estates = array();//here
        return view("search", compact('estates'))->withMessage("No Found!");//here
    }

Другая вещь в контроллере, я не могу добавить ->paginate(10) с ->get(), она возвращается как ошибка вроде:

Метод Illuminate \ Support \ Collection :: paginate не существует.

Я очень ценю любую помощь в решении этой проблемы.Спасибо!Кстати, если подключен или нет, я не знаю, но я уже удалил / изменил файл "boostrap" публично.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я решил проблемы.

Поменял контроллер прямо внизу.

$q = $request->q;
$estates = \DB::table('allestates')
                ->where("building_name","LIKE", "%" . $q . "%")
                ->orWhere("address","LIKE", "%" . $q . "%")
                ->orWhere("company_name","LIKE", "%" . $q . "%")
                ->orWhere("region","LIKE", "%" . $q . "%")
                ->orderBy('price')->paginate(10);

return view("search", compact('estates','q'));

Изменено представление

@if(count($estates))
    @foreach($estates as $estate)
        <!-- ... -->
    @endforeach
    {{ $estates ->appends(['q' => $q])->links() }}
@else
    <div class="alert">
        Not found!
    </div>
@endif

Я также изменил маршрут прямо ниже.

Route::any("/search", "PagesController@search")->name('search.route');

Также добавлены CSS для кнопок нумерации страниц.

0 голосов
/ 16 октября 2018

Нельзя использовать paginate() метод для DB фасада.Потому что DB возвращает экземпляр коллекции.Но paginate() - это метод Модели.Вам нужно вручную создать paginator из экземпляра коллекции.Попробуйте это:

$estates = \DB::table('allestates')
                ->where("building_name","LIKE", "%" . $q . "%")
                ->orWhere("address","LIKE", "%" . $q . "%")
                ->orWhere("company_name","LIKE", "%" . $q . "%")
                ->orWhere("region","LIKE", "%" . $q . "%")
                ->orderBy('price')->get();

$showPerPage = 10;

$perPagedData = $estates
            ->slice((request()->get('page') - 1) * $showPerPage, $showPerPage)
            ->all();

        $estates = new Illuminate\Pagination\LengthAwarePaginator($perPagedData, count($estates), $showPerPage, request()->get('page'));

Источник: Создание Paginator вручную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...