【发布时间】:2014-03-07 15:53:33
【问题描述】:
我在 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-relationship 工作,但当涉及多对多关系和数据透视表时,它似乎不起作用。
我试过这个:
class Kindergarden extends Eloquent {
public function children()
{
return $this->hasManyThrough('Children', 'Group', 'kid', 'gid');
}
}
然后尝试调用
Kindergarden::find(1)->children;
我确信有一种非常简单的方法可以做到这一点,但我对 laravel 完全陌生,而且对 sql 不是很擅长,所以我找不到任何东西来帮助我解决这个问题。
编辑: 设法找到使用 Fluent 的方法:
$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();
不过,仍然希望能够使用 Eloquent 来做到这一点。
【问题讨论】: