簡體   English   中英

Laravel雄辯的查詢與多層模型關系

[英]Laravel eloquent query with several layers of model relationships

我在Laravel中進行雄辯的數據庫查詢時遇到了一些麻煩。 我已經搜索了很多東西,但是我不知道確切要搜索什么才能得到答案。

我正在Laravel中為幼兒園建立一個網頁,我需要在一個集合/數組中將所有孩子連接到幼兒園。 問題是孩子只能通過他們的小組與幼兒園聯系。 因此,查詢需要能夠將屬於任何組的所有子級連接到幼兒園。

模型關系如下:
一個幼兒園有許多團體團體屬於一個幼兒園
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-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。

在您的幼兒園班上:

public function groups()
{
    $this->hasMany('Groups', 'group_id', 'id');
}

在您的小組課程中:

public function children()
{
    $this->hasMany('Children', 'child_id', 'id')
}

然后嘗試:

$children = Kindergarden::with(['groups', 'groups.children'])->get();

這樣,您可以遍歷幼兒園中的每個小組,並顯示每個小組中的每個孩子。

也只是一個建議:在您的數據庫表中,我將您的相關ID(例如,幼兒園表中的組ID)命名為group_id,而不是gid。 使它更具可讀性,並且您確切知道它的含義。 與您的孩子ID相同,將其命名為“ child_id”而不是“ chiid”。

編輯:由於我不知道您的表結構,因此請謹慎使用上面的函數。 希望我的建議能使您走上正確的道路! 讓我知道是否有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM