2017-02-20 2 views
0

Szenario: Auf einer hasMany Beziehung, mit der with-Funktion (für eager loading), ich die Ergebnisse aus jeder der Reihen innerhalb (statt der Gesamt) begrenzen wollen.Laravel hasMany Beziehung begrenzen mit Abfrage

Ich verfolge dieses Tutorial (wie ich denke, es ist der einzige Weg zu erreichen, was ich brauche, was ich habe so lesen Sie weiter) - https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

Ich habe ein Model - Zimmer, dass hasMany Bewertungen. Modell

Zimmer:

class Room extends Scopes\BaseModel 

    public function reviews() 
    { 
     return $this->hasMany('App\Review'); 
    } 

    public function latestReviews() 
    { 
     return $this->reviews()->latest()->nPerGroup('room_id', 1); 
    } 

Scopes/BaseModel.php:

Direktes Kopieren von der Tutorial-Website, aber mit dem Namensraum von namespace App\Scopes;

-Controller mit dem mit Funktion:

class Room extends Scopes\BaseModel 

$rooms = Room::where('room_types_id', $specialism_id) 
      ->with('latestReviews') 
      ->get(); 

Fehler:

RelationNotFoundException in RelationNotFoundException.php line 20: Call to undefined relationship [latestReviews] on model [App\Room].

Antwort

0

Es gibt zwei Möglichkeiten, dies zu tun. die erste ist mehr wie:

Room::with(['reviews' => function ($q) { 
       $q->where('*CONDITION IF NEEDED*')->orderBy('created_at', 'desc')->take(1); 
      }])->where('room_types_id', $specialism_id)->get(); 

Die zweite Möglichkeit ist die Verwendung von Accessoren.

public function getLatestReviewAttribute(){ 
    return Review::where('room_id', $this->attributes['id'])->orderBy('created_at','desc')->take(1)->get(); 
} 

und Sie können es auf Ihre Ansicht zugreifen, indem $room->latest_review->review_column_name; Während auf dem Controller verwenden, können Sie nur Room::all(); tun;

+0

Vielen Dank, aber die beiden Lösungen begrenzen die Gesamtzahl der Bewertungen, nicht die Gesamtzahl der Bewertungen für jedes Zimmer. – Ben

+0

Die zweite beschränkt die Anzahl der Bewertungen für jedes Zimmer in der Sammlung – xhulio

+0

Wo verwende ich bitte die Accessor-Methode? – Ben

Verwandte Themen