#laravel #laravel-5.8
#laravel #laravel-5.8
Вопрос:
У меня проблема с разбиением на страницы, пока я просмотрел документы, но я не могу там найти. Я также просмотрел другой пост о stack overflow, но в них нет условий, которые у меня есть в этом случае. Итак, как я могу разбить if
инструкцию на страницы, потому что я получаю ошибку
Неопределенное свойство: Illuminate Разбивка на страницы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:
Вы можете использовать whereHas()
метод для добавления условий отношений (docs).
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
методом в соответствии с вашими потребностями.
Комментарии:
1. Это возвращает ошибку
Argument 1 passed to IlluminateDatabaseQueryBuilder::cleanBindings() must be of the type array, string given
(не до конца понимаюwherein
), но я думаю, чтоid
oftags.id
в этом случае должно быть имя таблицы базы данных, но даже если я это сделаю, оно все равно вернет ошибку. Я также просмотрел это, в котором представлены документы laravel2. Работает, когда вы меняете
whereIn
наwhere
. Если это не сработает: как выглядят$request->tags
данные? Не могли бы вы предоставить дамп данных.3. Это работает, но при переходе на вторую страницу разбивки на страницы происходит ее сброс.
4. Вам нужно добавить данные к ссылкам на разбивку на страницы. На этой странице выполните поиск
Appending To Pagination Links
. Вам нужно сделать что-то вроде:{{ $threads->appends(['tags' => $tags])->links() }}
. Но затем убедитесь, что вы отправили переменную $ tags в представление с правильным содержимым из контроллера.