Php 如何将这个内部连接mysql查询转换为Laravel';他说得流利吗?
我有一个内部连接查询,我想转换成Laravel的fluent。它部分起作用的东西。我能够得到结果,但是mysql支持的那些操作符,比如Php 如何将这个内部连接mysql查询转换为Laravel';他说得流利吗?,php,mysql,laravel,join,Php,Mysql,Laravel,Join,我有一个内部连接查询,我想转换成Laravel的fluent。它部分起作用的东西。我能够得到结果,但是mysql支持的那些操作符,比如和,我发现很难将其应用到我的流畅查询中 mysql查询: SELECT students.surname as Name, subjects.name as Subject, grades.name as Class, terms.name as Term, score as Score from scores inner join students
和,我发现很难将其应用到我的流畅查询中
mysql查询:
SELECT students.surname as Name, subjects.name as Subject, grades.name as Class, terms.name as Term, score as Score
from scores
inner join students
on students.id = scores.student_id
and scores.student_id = 1
inner join subjects
on subjects.id = scores.subject_id
and scores.student_id = 1
inner join grades
on grades.id = scores.grade_id
and scores.student_id = 1
inner join terms
on terms.id = scores.term_id
and scores.student_id = 1
where scores.term_id = 1 or scores.term_id = 2 or scores.term_id = 3;
laravel查询:
$scores = \DB::table('scores')
->join('students', 'students.id', '=', 'scores.student_id')
->join('subjects', 'subjects.id', '=', 'scores.subject_id')
->join('grades', 'grades.id', '=', 'scores.grade_id')
->join('terms', 'terms.id', '=', 'scores.term_id')
->select('students.surname', 'subjects.name', 'grades.name', 'terms.name', 'score')
->where('students.id', '=', '1', 'and', 'scores.term_id', '=', '1', 'or', 'scores.term_id', '=', '2', 'or', 'scores.term_id', '=', '3')
->get();
我现在遇到的问题是where子句。看起来and操作符被忽略了,返回的结果不在结果集中
这是我添加时的结果集:
第四阶段不应在结果集中,因为它是第四阶段注意第1学期是第1学期,第2学期是第2学期,第3学期是第3学期查看更多文档,但您可以清理您制作的where子句(您可以更改文档以表示您在右上角使用的laravel版本)
而不是
->其中('students.id'、'='、'1'、'scores.term_id'、'='、'1'、'or'、'scores.term_id'、'='、'2'、'or'、'scores.term_id'、'3')
做:
使用whereBetween
获得您想要的结果:
$scores = \DB::table('scores')
->join('students', 'students.id', '=', 'scores.student_id')
->join('subjects', 'subjects.id', '=', 'scores.subject_id')
->join('grades', 'grades.id', '=', 'scores.grade_id')
->join('terms', 'terms.id', '=', 'scores.term_id')
->select('students.surname', 'subjects.name', 'grades.name', 'terms.name', 'score')
->where('students.id', 1)
->whereBetween('scores.term_id', [1, 3])
->get();
$scores = \DB::table('scores')
->join('students', 'students.id', '=', 'scores.student_id')
->join('subjects', 'subjects.id', '=', 'scores.subject_id')
->join('grades', 'grades.id', '=', 'scores.grade_id')
->join('terms', 'terms.id', '=', 'scores.term_id')
->select('students.surname', 'subjects.name', 'grades.name', 'terms.name', 'score')
->where('students.id', 1)
->whereBetween('scores.term_id', [1, 3])
->get();