2017-02-17 3 views
1

I Paginierung in Laravel umzusetzen versuchen und bekamen Fehler folgendeWie Paginierung zu verwenden zusammen mit Laravel eloquent find-Methode in Laravel 5.4

Undefined property: Illuminate\Pagination\LengthAwarePaginator::$name 

Hier ist meine Controller-Funktion

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); 
} 

Hier die ist Tag Modell

Das Tag und Post-Modell hat AngleToMany Beziehung so gibt es viele Beiträge u Unter dem spezifischen Tag und mein Ziel ist es, alle Beiträge unter den spezifischen Tags absteigend Reihenfolge der Post zu iterieren und auch Seitenumbruch auf dieser Seite zu implementieren. Hier

ist der Code für showtags sehen

<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> 

Wenn jemand weiß, wie dies zu tun, bitte antworten. Danke im Voraus.

+1

nicht sicher, ob ich etwas fehlte aber 'find' nur bekommt eine einzige Reihe, so dass Sie‘ t paginieren das. Was versuchst du zu machen? – apokryfos

+0

@apokryfos Ich weiß, dass Find nur eine Zeile geben, aber Sie können meiner Ansicht nach sehen, dass ich alle Beiträge unter dem gleichen Tag iterieren, da das Tag zu vielen Relationen mit Beiträgen gehört. Mein Ziel ist es, alle Beiträge unter dem gleichen Tag durch Paginierung zu organisieren. Also gibt es eine Möglichkeit, das zu tun –

+1

Also würden Sie wahrscheinlich etwas tun wie $ Tag-> posts() -> paginate (5) 'oder so ähnlich. – apokryfos

Antwort

2

Ich löse das Problem mit einem einfachen Trick. Mein Ziel war es, alle Posts unter den gleichen Tags zu paginieren, wie Sie es in StackOverflow sehen können.

Die modifizierte Reglerfunktion ist

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); 
} 

Wie Sie Jungs sehen, dass ich die Paginieren() Funktion von find bewegen Funktion zu laden, die ich vor Post für die Sortierung verwenden, indem absteigender Reihenfolge.

nun im Hinblick statt {!! $tag->links() !!} traditionelle Methode für die Herstellung von Verbindung von Paginierung

Ich benutze {!! $tag->paginate(10) !!}

0

Mit dieser Zeile $tag = Tag::find($id)->paginate(5); Sie sollten nur ein Tag erhalten (oder Null, wenn das Tag mit Ihrer ID-Dosis nicht existiert), und danach wollen Sie es paginieren. Wenn Sie Ihre Tags paginieren möchten, erhalten Sie alle Tags und danach paginieren sie Tag::paginate(5)