2017-02-13 12 views
2

Текущая логическая установка:Уплотненного hasMany жадной загрузки функция Laravel

  • Комната может иметь много объектов.
  • Объект может иметь множество баллов.

- Проблема в том, что объекты могут иметь или не иметь никаких баллов.

Сценарий: Я хочу, чтобы получить только те объекты, которые имеют ряд, основанный на room_id я обеспечиваю.

Покушение:

$audits = Room::where('id', $room_id) 
      ->has('objects.scores') 
      ->get(); 

Что я вывод, что это возвращение всех объектов, даже если только несколько объектов, на самом деле имеют балл.

Отношение (комнаты):

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

Отношение (объекты):

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

отношения (результаты):

public function object() 
    { 
     return $this->belongsTo('App\Object'); 
    } 

Как я могу запросить обратное? Или правильный путь! Мне нужны только объекты, у которых есть оценка, связанная с ними, и, следовательно, все, что связано с ними (комнаты и т. Д.)

Большое спасибо.

+0

Точки обозначение для вложенного запроса отношения выглядит хорошо; Я чувствую, что это должно возвращать правильные результаты (только «Room's», у которых есть «Object», который имеет «Score». Как вы определяете отношения «object» в «Room»? И также, интересно, может ли это быть хороший случай для использования отношения hasManyThrough()? – camelCase

+1

@camelCase, я добавил отношение Object к описанию. – Ben

+2

Что делает «dd (Room :: where ('id', $ room_id) -> has (' objects.scores ') -> toSql()); "show? –

ответ

0

есть недостающая декларация отношения в вашей модели объектов, вы должны поместить

Relationship (объекты):

public function scores() 
{ 
    return $this->hasMany('App\Scores'); 
} 
public function room() 
{ 
    return $this->belongsTo('App\Rooms'); 
}