![](/img/trans.png)
[英]Laravel Eloquent select from one table and join first row if there's a match from another table
[英]How to select from a table based on another table's values Eloquent?
我正在尝试获取一些仍然活跃的学生的数据。 即使我在同一个表中有来自不活跃学生的数据。
这是学生出勤
这是学生课
这是我想出的 Eloquent 查询:
StudentAttendance::
select('student_classes.active', 'student_attendances.student_id', 'student_attendances.classroom_id', 'classrooms.classroom', 'attendance_rules.option')
->join('classrooms', 'classrooms.id', '=', 'student_attendances.classroom_id')
->join('attendance_rules','attendance_rules.id', '=', 'student_attendances.attendance_id')
->join('student_classes', 'student_attendances.student_id', '=', 'student_classes.student_id')
->where('attendance_date', date("Y-m-d"))
->orderBy('classrooms.classroom', 'ASC')
->get();
查询语句:
select `student_classes`.`active`, `student_attendances`.`student_id`, `student_attendances`.`classroom_id`, `classrooms`.`classroom`, `attendance_rules`.`option`
from `student_attendances`
inner join `classrooms` on `classrooms`.`id` = `student_attendances`.`classroom_id`
inner join `attendance_rules` on `attendance_rules`.`id` = `student_attendances`.`attendance_id`
inner join `student_classes` on `student_attendances`.`student_id` = `student_classes`.`student_id`
where `attendance_date` = '2020-02-11'
order by `classrooms`.`classroom` asc
现在我的 Eloquent 查询结果如下:
如您所见,student_id 22 的classroom_id 为2 处于非活动状态,但它似乎处于非活动状态一次,其余处于活动状态。 如果我删除 student_classes 加入,我将不会得到所有重复的结果。
目标是即使我在 StudentAttendance 中查询,也显示学生在 StudentClass 中活跃(active = 1)的今天所有出勤率。
您将希望将您的加入范围student_classes
为student_classes
以仅查看活动记录。
您可以通过在 join 方法中使用回调来做到这一点:
->join('student_classes', function ($join) {
$join->on('student_attendances.student_id', '=', 'student_classes.student_id')
->on('student_classes.classroom_id', '=', 'student_attendances.classroom_id')
->where('student_classes.active', 1);
})
这在查询生成器文档中的“高级加入条款”中进行了介绍 - https://laravel.com/docs/5.8/queries#joins
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.