我在Laravel中进行雄辩的数据库查询时遇到了一些麻烦。我已经搜查了很多,但我不知道如何寻找答案。Laravel与多个模型关系层的雄辩查询
我正在拉拉维尔为幼儿园做一个网页,我需要让所有的孩子都与一个幼儿园连在一个集合/数组中。问题在于孩子们只能通过他们的小组与幼儿园联系。所以查询需要能够让所有属于幼儿园的任何小组的所有孩子都能够接触到幼儿园。
模型关系是这样的:
一个幼儿园有许多组,并组属于幼儿园一个。
一个组有许多孩子,并孩子有很多组。
我已经设法到目前为止做的最好的是这样的:
public function getChildren(){
$kid = Session::get('kid');
$k = Kindergarden::find($kid);
$groups = $k->group;
$children;
foreach($groups as $g){
$children = $children->merge($g->children);
}
$children = $children->toArray();
return Response::json($children);
}
但是,这使得重复当孩子在幼儿园同几组。这似乎也是一种不必要的复杂方式。
有一段时间我也尝试让hasManyThrough关系起作用,但是当存在一个多对多关系和一个数据透视表时,它似乎不起作用。
我试着用这样的:
class Kindergarden extends Eloquent {
public function children()
{
return $this->hasManyThrough('Children', 'Group', 'kid', 'gid');
}
}
,然后试着打电话给
Kindergarden::find(1)->children;
我敢肯定有一个非常简单的方法来做到这一点,但我完全陌生的laravel在sql中并不是那么棒,所以我一直无法找到任何帮助我弄清楚的东西。
编辑: 设法找到一种方法使用流利的做到这一点:
$children = DB::table('children')
->join('children_group', 'children.chiid', '=', 'children_group.chiid')
->join('group', 'group.gid', '=', 'children_group.gid')
->where('group.kid', '=', $kid)
->groupby('children.chiid')
->get();
还是希望能够做到这一点使用口若悬河,虽然。
如果有必要,我建议添加 - > where('id',$ my-> id)子句更直接搜索。但是这个答案看起来不错。 +1 –