Laravel Eloquent 5表关系和where子句

时间:2019-03-21 07:58:29

标签: laravel eloquent

我必须连接5张桌子 这是我的数据库结构 enter image description here

1)学校与班级之间的多对多关系 2)用户一次可以属于多所学校和许多班级(例如,老师可以一次在多所学校教多个班级),因此为了满足这一需求,我使用了从属关系表格

这是表格的示例数据

**users**                 **affiliation**      **class_school**
-----------------------  -------------------  -----------------------------
| id      | name      |  | user_id  | cs_id | | id  | s_id  | c_id |room_no|
| 1       | steve     |  | 1        | 1     | | 1   | 1     | 1    | A1    |
| 2       | andrew    |  | 1        | 3     | | 2   | 1     | 2    | B23   |
-----------------------  | 2        | 2     | | 3   | 2     | 1    | 01    |
----------------------   -------------------  -----------------------------

**schools**                   **classes**
-------------------------   ---------------
| id   | name  |address |   | id  | name   |
| 1    | a     | abcd   |   | 1   | prep   |
| 2    | b     | efgh   |   | 2   | KG     |
------------------------- ------------------

现在我必须查询用户  1)隶属于特定学校的特定班级

在用户模型中,我已经设置了与关联的关系

public function affiliation(){
    return $this->hasMany(AffiliationModel::class,'u_id');
}

以及从属关系模式

public function schools(){
    return $this->belongsToMany(SchoolsModel::class,'class_school','id','s_id','cs_id');
}

使用此代码,我可以使用代码过滤学校

UserModle::whereHas("affiliation.schools",function($q){$query->where('schools.id',1)})->get()

但是为此 1-)返回所有用户。但没有学校信息 2-)我将如何查询是否要从特定学校的任何特定班级获得用户 截至目前,m使用查询构建:|

DB::table('users')
        ->select('users.id','users.name','users.email','users.gender','users.dob','users.active')
        ->selectRaw(' CONCAT ( CONCAT(schools.name,\'##\',schools.id),\'---\',
            GROUP_CONCAT(
                DISTINCT CONCAT(
                    classes.name,\'#\',classes.id
                )
                SEPARATOR \'||\'
            )
        )
            as schools')
        ->join('affiliation','affiliation.u_id','=','users.id')
        ->join('class_school','class_school.id','=','affiliation.cs_id')
        ->join('schools','schools.id','=','class_school.s_id')
        ->join('classes','classes.id','=','class_school.c_id')
        ->groupBy('users.id')->groupBy('schools.id');

我想像格式一样

[
    {
        "id": 1,
        "name": steve,
        "school": [{
            "id": 1,
            "name": "a",
            "address":"abcd",
            "classes":[
                {
                "id":1,
                "name":prep
               },
               {
                "id":2,
                "name":kg
               }
             ]
        }] 
    }
]

0 个答案:

没有答案