Мне нужно подключиться. 5 Таблицы. Вот моя структура базы данных.
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 -) как я буду запрашивать, хочу ли я получить пользователей из какого-либо конкретного класса конкретной школы на данный момент, используя сборку запросов: |
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');
я хочу получить b как в формате
[
{
"id": 1,
"name": steve,
"school": [{
"id": 1,
"name": "a",
"address":"abcd",
"classes":[
{
"id":1,
"name":prep
},
{
"id":2,
"name":kg
}
]
}]
}
]