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
}
]
}]
}
]