Laravel雄辩的查询与多层模型关系

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。

Ste*_*man 5

在您的幼儿园班上:

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”。

编辑:由于我不知道您的表结构,因此请谨慎使用上面的函数。希望我的建议能使您走上正确的道路!让我知道是否有帮助