2017-02-13 73 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

您的嵌套關係查詢點符號看起來不錯;我覺得這應該返回正確的結果(只有'房間''有一個'對象'有一個'分數'。你如何定義'房間'中的'對象'關係?還有,我想知道這是否可能是使用'hasManyThrough()'關係的一個好例子? – camelCase

+1

@camelCase,我已經添加了對象關係到描述。 – Ben

+2

什麼是「dd(Room :: where('id',$ room_id) - > has(' objects.scores') - > toSql());「show? –

回答

0

有在你的對象模型中缺失的關係聲明,你就應該把

關係(對象):

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