Проверено много;
Когда я использую find
, получаю только одну строку.
Group::with(['student'=>function($query){
$query->select(DB::raw(' group_id ,count(`id`) as number, sum(tuition) as total'));
}])->find(1);
Это сработало.
Единственное, что мне не хватает, мне нужно выбрать student.group_id
, что означает foreign key
в hasMany
отношениях.
Но когда вы хотите использовать paginate
или get
метод выборки умножить строки.
Вы получите только общий результат, если ваш первый объект модели с другими значениями равен нулю.
{
"id": 1,
"name":"first",
"student": [
{
"group_id": 1,
"number": 129,
"total": "38700.00"
}
]
},
{
"id": 2,
"name":"second",
"student": []
},
{
"id": 3,
"name":"third",
"student": []
},
Просто добавьте ->groupBy('group_id)
и вы получите то, что хотите
Group::with(['student'=>function($query){
$query->select(DB::raw('id, class_id ,count(`id`) as numbers, sum(tuition) as total'))->groupBy('group_id');
}])->paginate(10);
Результат:
{
"id": 1,
"name":"first",
"student": [
{
"group_id": 1,
"number": 40,
"total": "12000.00"
}
]
},
{
"id": 2,
"name":"second",
"student": [
{
"group_id": 2,
"number": 43,
"total": "12900.00"
}
]
},
{
"id": 3,
"name":"third",
"student": [
{
"group_id": 3,
"number": 46,
"total": "13800.00"
}
]
},