2017-02-14 2 views
1

Ich versuche, die nächsten und vorherigen Artikel (Titel und Bild) für jedes Thema, und ich habe diese für den nächsten und vorherigen Verbindungen zu erhalten:erhalten nächsten und vorherigen Eintrag in Laravel

$currentUser = PostTranslation::find($post->id); 

$previousUserID = PostTranslation::where('id', '<', $currentUser->id)->max('id'); 

$nextUserID = PostTranslation::where('id', '>', $currentUser->id)->min('id'); 

aber es ist einfach zu bekommen die nächste und vorherige Link-ID, die ich brauche, um auch den Titel für sie zu bekommen. Ich habe dies verwendet:

$previousUserID2 = PostTranslation::find($currentUser->id-1); 

aber es ist, wenn id = 0, dass ich eine Störung erhalte.

+0

http://stackoverflow.com/a/27942973/465388 – igneosaur

Antwort

1

Wenn Ihr Dataset zu groß ist, kann max und min Ihre SQL verlangsamen.

Sie können first zusammen mit orderby verwenden, die das erste Modell abrufen, das den Abfrageeinschränkungen entspricht.

$currentUser = PostTranslation::find($post->id); 
    //order by descending order and take the first entry 
    $previousUser = PostTranslation::where('id', '<', $currentUser->id)->select('id','title')->orderby('id','desc')->first(); 
    $previous_id=$previousUser ->id; 
    $previous_title=$previousUser ->title; 
    //order by ascending order and take the first entry 
    $nextUser = PostTranslation::where('id', '>', $currentUser->id)->select('id','title')->orderby('id','asc')->first(); 
    $next_id=$nextUser ->id; 
    $next_title=$nextUser ->title; 
+0

Danke für Ihre Hilfe, hat es bei mir gelöst, aber immer noch ein Problem mit dem letzten Datensatz, wenn ich beim ersten Datensatz oder letzten bin ich habe diesen Fehler: Versuch, Eigenschaft von Nicht-Objekt zu bekommen –

+0

@DinaShaldoum Sie müssen nur in einigen Schecks schreiben, beispielsweise. 'if ($ previousUser) // Mach deine Sachen hier. – igneosaur

-1

Das ist letzter Code i an meinem Controller verwendet:

$previousUser = PostTranslation::join('posts', 'posts.id', '=', 'post_translations.post_id') 
     ->where('posts.id', '<', $currentUser->id) 
     ->select('posts.id','post_translations.title','post_image') 
     ->orderby('posts.id','desc') 
     ->where('post_translations.language', $language) 
     ->first(); 
+0

Ich habe geschrieben, wenn ($ vorherigerUser) vor dem Aufruf der Daten in meiner Ansicht und es ist gelöst .. –

+0

Dies ist Kopie meiner Antwort, sollten Sie die richtige Antwort markieren, anstatt die Antwort zu kopieren, wird es niemandem helfen – sumit

Verwandte Themen