2017-02-20 29 views
0

Сценарий: На hasMany отношения, используя функцию with (для нетерпеливого нагрузки), я хочу, чтобы ограничить результаты от каждой из строк в пределах (вместо общего количества).Laravel hasMany отношения, ограничивают с запросом

Я следую этому учебнику (как я думаю, что это единственный способ добиться того, что мне нужно от того, что я читал на SO) - https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

У меня есть Model - номер, что hasMany обзоров.

Модель номер:

class Room extends Scopes\BaseModel 

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

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

Прицелы/BaseModel.php:

Прямая копия учебника веб-сайта, но с пространством имен namespace App\Scopes;

контроллер, используя с функция:

class Room extends Scopes\BaseModel 

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

Ошибка:

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

ответ

0

Есть 2 способа сделать это. в первую очередь:

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

Второй способ - использование аксессуаров.

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

и вы можете получить доступ к нему на ваш взгляд, с помощью $room->latest_review->review_column_name; Хотя на контроллере вы можете просто сделать Room::all();;

+0

Спасибо, но два решения ограничивают общее количество отзывов, а не общее количество отзывов для каждой комнаты. – Ben

+0

Второй ограничивает количество отзывов для каждой комнаты в коллекции – xhulio

+0

Где я могу использовать метод доступа? – Ben