Php 如何将这个内部连接mysql查询转换为Laravel';他说得流利吗?

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

我有一个内部连接查询,我想转换成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
        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();