Ларавел 5.7 |Пагинация - красноречивый запрос (таблица отношений) - PullRequest
0 голосов
/ 14 октября 2019

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

PageController - метод show:

$page = Page::where('slug', $slug)->with(['subpages'=>function($q) {
                $q->where('visible', 1)->orderBy('order', 'asc')->paginate(9);
}])->first();

Я хотел бы разбить страницы на страницы блейда вида (Страница - от одного домногие - отношение подстраницы)

Вот часть моего представления show.blade.php:

{{ $page->subpages->links() }}

Ошибка:

Method Illuminate\Database\Eloquent\Collection::links does not exist.

РЕДАКТИРОВАТЬ:

ПОЛНАЯ ФУНКЦИЯ ШОУ:

public function show(PageRepository $pageRepo, $slug){
        $page = Page::where('slug', $slug)->with(['subpages'=>function($q) {
            $q->where('visible', 1)->orderBy('order', 'asc');
        }])->first();
        $subpages = $page->subpages()->paginate(2);
        $sidebar = Navbar::where('type','sidebar')->orderBy('order')->with(['pages'])->get();
        return view('pages.page.show', [
            "page" => $page,
            "subpages" => $subpages,
            "sidebar" => $sidebar,
   ]);
}

ПРОСМОТР:

<div class="row display-flex">
    @foreach($page->subpages as $subpage)
    <div class="col-sm-4">
        <div class="card mb20">
            <div class="card-block">
                <h4 class="card-title font400">{{ $subpage->title }}</h4>
            </div>
        </div>
    </div>
    @endforeach
</div>
{{ $subpages->links() }}

1 Ответ

1 голос
/ 14 октября 2019

Если ваша цель состоит в том, чтобы разбить отношение на части из того, что я вижу, но вы запрашиваете родительскую модель. Вот что не так. Вы должны полностью изменить свою логику, так как подзапрос не отображает отношения внутри модели Laravel. Он просто используется как условие для извлечения этой модели.

Ваш запрос должен выглядеть следующим образом:

$page = Page::where('slug', $slug)->with(['subpages'=>function($q) {
    $q->where('visible', 1)->orderBy('order', 'asc') // ->paginate(9); This is not necessary
}])->first();

Теперь, когда у вас есть родительская модель, вы можете выполнить новый запрос для отношенияи там вы должны вызвать метод paginate:

Я не думаю, что было бы хорошей практикой делать что-то подобное в вашем виде лезвия:

{{ $page->subpages()->paginate(9)->links() }}

НоЛучше реализовать новую переменную:

// Previous code that retrieves the page

$subpages = $page->subpages()->paginate(9);

return response()->view('your.blade.view', compact('page', 'subpages');

, теперь вы можете использовать переменную subpages, которая содержит разбитые на страницы результаты, на ваш взгляд

...