bor*_*orb 3 php laravel eloquent
我在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);
}
Run Code Online (Sandbox Code Playgroud)
但是,当孩子在同一个幼儿园的多个小组中时,这会造成重复。这似乎也是不必要的复杂方法。
有一阵子我也尝试使hasManyThrough关系起作用,但是当涉及多对多关系和数据透视表时,它似乎不起作用。
我尝试了这个:
class Kindergarden extends Eloquent {
public function children()
{
return $this->hasManyThrough('Children', 'Group', 'kid', 'gid');
}
}
Run Code Online (Sandbox Code Playgroud)
然后尝试打电话
Kindergarden::find(1)->children;
Run Code Online (Sandbox Code Playgroud)
我敢肯定有一种非常简单的方法可以做到这一点,但是我对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();
Run Code Online (Sandbox Code Playgroud)
不过,仍然希望能够使用Eloquent。
在您的幼儿园班上:
public function groups()
{
$this->hasMany('Groups', 'group_id', 'id');
}
Run Code Online (Sandbox Code Playgroud)
在您的小组课程中:
public function children()
{
$this->hasMany('Children', 'child_id', 'id')
}
Run Code Online (Sandbox Code Playgroud)
然后尝试:
$children = Kindergarden::with('groups.children')->get();
Run Code Online (Sandbox Code Playgroud)
这样,您可以遍历幼儿园中的每个小组,并显示每个小组中的每个孩子。
也只是一个建议:在您的数据库表中,我将您的相关ID(例如,幼儿园表中的组ID)命名为group_id,而不是gid。使它更具可读性,并且您确切知道它的含义。与您的孩子ID相同,将其命名为“ child_id”而不是“ chiid”。
编辑:由于我不知道您的表结构,因此请谨慎使用上面的函数。希望我的建议能使您走上正确的道路!让我知道是否有帮助
| 归档时间: |
|
| 查看次数: |
1754 次 |
| 最近记录: |