假设我有一个Laravel 5.5应用,其中包含四个模型:
var hash = CRYPTO.privateDecrypt({
'key': privateKey,
'passphrase': 'passphrase',
'cipher': 'aes-256-cbc',
'padding': CRYPTO.constants.RSA_PKCS1_PADDING
}, buffer).toString();
,Class
,Student
和Assignment
一个AssignmentSubmission
属于许多Class
,一个Students
属于许多Student
,一个Classes
属于一个AssignmentSubmission
,一个{ {1}}和一个Assignment
。
所以表看起来像这样:
User
现在,在查询构建器类中,我需要构造一个查询,该查询返回属于Class
的{{1}},并带有一个名为classes:
id
name
students:
id
name
class_student:
class_id
student_id
assignments:
id
name
assignment_submissions:
id
class_id
student_id
assignment_id
的额外列,并计算出多少分配该学生只为该课程提交了课程。
我的第一个通话港口是:
Students
但这将返回该学生在所有课程中提交的作业总数。
以下mySql查询返回正确的数据:
Class
但是我似乎无法以正确的顺序获得total_assignment_submissions
$class->students()->withCount('assignmentSubmissions')->get();
和SELECT *,
(SELECT Count(*)
FROM `assignment_submission`
WHERE `student_id` = `students`.`id`
AND `class_id` = ?) AS total_assignment_submissions
FROM `students`
INNER JOIN `class_student`
ON `students`.`id` = `class_student`.`student_id`
WHERE `class_student`.`class_id` = ?
的电话来获得自己想要的东西。似乎我只对原始查询执行此操作,但事件id尚未经过过滤,否则我可以执行此操作,但它仅返回selectSub()
字段,而不返回addSelect()
的其余字段。 / p>
raw()
必须有一种方法可以做到这一点。我在这里想念什么?
答案 0 :(得分:2)
withCount()
可能受到限制。
$class->students()->withCount(['assignmentSubmissions' => function($q) use($course_id){
$q->where('course_id', $course_id);
}])->get();
这会将计数限制为该特定课程。