2017-02-13 82 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'); 
}