我在用Laravel查询数据库时遇到了一些困难。我到处找了很多东西,但我不知道要找什么才能得到答案。
我正在用Laravel为幼儿园制作一个网页,我需要让所有的孩子都在一个集合/数组中连接到一个幼儿园。问题是,孩子们只有通过他们的群体才能与幼儿园相连。因此,该查询需要能够获取所有连接到幼儿园的组中的所有子元素。
模型关系如下:
kindergarden有多个组,属于品园。
A组有多个子组,子类有许多组。
到目前为止,我所做的最好的事情是:
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方面也不是那么出色,所以我还没有找到任何东西来帮助我解决这个问题。
编辑:设法找到了一种使用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();但还是希望能用雄辩的口才去做。
发布于 2014-03-08 16:25:28
在你的幼儿园课堂上:
public function groups()
{
$this->hasMany('Groups', 'group_id', 'id');
}在你的小组课上:
public function children()
{
$this->hasMany('Children', 'child_id', 'id')
}然后试着:
$children = Kindergarden::with('groups.children')->get();通过这种方式,您可以在Kindergarden中遍历每个组,并显示每个组中的每个子组。
还有一个建议:在您的数据库表中,我将命名您的相关ID (例如Kinder花园表中的组ID) group_id,而不是gid。使它更加可读性更强,而且你完全知道它与什么相关。与您的孩子id相同,请将其命名为“child_id”而不是“chiid”。
编辑:因为我不知道你的表的结构,把上面的功能拿来一粒盐。我希望我的建议能让你走上正确的道路!如果有帮助请告诉我
https://stackoverflow.com/questions/22254692
复制相似问题