Пагинация в laravel с условиями - PullRequest
0 голосов
/ 26 марта 2019

У меня проблемы с нумерацией страниц, пока я смотрел на документы , но там не могу найти. Я также посмотрел другие посты о переполнении стека, но у них нет условий, которые есть в этом случае. Так, как я могу разбить на страницы оператор if, потому что я получаю ошибку

Неопределенное свойство: Illuminate \ Pagination \ LengthAwarePaginator :: $ threads

потому что, когда вы разбиваете на страницы, вам нужно вытащить это прямо из модели, как эта model::paginate(), как вы можете сделать это в этом случае?

контроллер

public function index(Request $request)
{
    if($request->has('tags')){
        $tag = Tag::find($request->tags)->paginate(10);
        $threads = $tag->threads;
    } else {
        $threads = Thread::paginate(10);
    }
    return view('thread.index', compact('threads'));
}

так как вы можете правильно разбить на страницы $tag = Tag::find($request->tags)->paginate(10); это?

блейд, который генерирует ссылку, откуда контроллер получает tag, если эта ссылка нажата

<div class="col-md-3">
<h4>Tags</h4>
<ul class="list-group">
    <a href="{{route('thread.index')}}" class="list-group-item">
        <span class="badge">14</span>
        All Threads
    </a>
    @foreach($tags as $tag)
    <a href="{{route('thread.index',['tags' => $tag->id])}}" class="list-group-item">
        <span class="badge">14</span>
        {{$tag->name}}
    </a>
    @endforeach
</ul>

Обновление

var_dump($request->tags); в контроллере падает string(1) "2"

1 Ответ

3 голосов
/ 26 марта 2019

Вы можете использовать метод whereHas() для добавления реляционных условий ( документы ).

if ($request->has('tags')){
    $threads = Thread::whereHas('tags', function ($query) use ($request) {
            $query->whereIn('tags.id', $request->tags);
        })->paginate(10);
} else {
    $threads = Thread::paginate(10);
}

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

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