Я пытаюсь реализовать разбиение на страницы в laravel и получил следующую ошибку
Undefined property: Illuminate\Pagination\LengthAwarePaginator::$name
Вот моя функция контроллера
public function showTags($id) { $tag = Tag::find($id)->paginate(5); // when lazy loading $tag->load(['posts' => function ($q) { $q->orderBy('id', 'desc'); }]); return view('blog.showtags')->withTag($tag); }
Вот модель тегов
class Tag extends Model { public function posts() { return $this->belongsToMany('App\Post'); } }
Модель Tag и Post имеет отношение ToMany Relationship, поэтому есть много сообщений по конкретному тегу, и моя цель – перебирать все сообщения в соответствии с указанными тегами в порядке убывания поста, а также осуществлять разбивку на страницы на этой странице.
Вот код для просмотра showtags
<table class="table"> <thead> <tr> <th>#</th> <th>Title</th> <th>Tags</th> </tr> </thead> <tbody> <?php $count = 1; ?> @foreach($tag->posts as $post) <tr> <th>{{ $count++ }}</th> <th>{{ $post->title }}</th> <th>@foreach($post->tags as $tag) <span class="label label-default">{{ $tag->name }}</span> @endforeach </th> </tr> @endforeach </tbody> </table> //Here is the code i used for pagination in view <div class="text-center"> {!! $tag->posts->links() !!} </div>
Если кто-нибудь знает, как это сделать, ответьте. Заранее спасибо.
Я решаю проблему, используя простой трюк. Моя цель состояла в том, чтобы разбивать все сообщения по тем же тегам, что и вы, ребята, видите в StackOverflow.
Модифицированная функция контроллера
public function showTags($id) { $tag = Tag::find($id); // when lazy loading $tag->load(['posts' => function ($q) { $q->orderBy('id', 'desc')->paginate(10); }]); return view('blog.showtags')->withTag($tag); }
Как вы, ребята, видите, что я перемещаю функцию paginate () из функции find to load, которую я использую раньше, для сортировки сообщения по убыванию.
Теперь вместо использования традиционного метода {!! $tag->links() !!}
{!! $tag->links() !!}
для создания ссылки на разбиение на страницы
Я использую {!! $tag->paginate(10) !!}
{!! $tag->paginate(10) !!}
С помощью этой строки $tag = Tag::find($id)->paginate(5);
Вы должны получить только один тег (или null, если тег с дозой id не существует), и после этого вы хотите его разбивать на страницы. Если вы хотите разбивать на страницы свои теги, получите все теги и после этого разбивайте их на страницы Tag::paginate(5)