我有这个内连接查询,我想要转换为Laravel的流利。它部分工作的东西。我能够得到结果,但mysql支持的运算符如and
我发现很难将它应用于我的流畅查询。
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 query:
$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子句中。这似乎是和操作符被忽略并返回不在结果集中的结果。
第4期不应该在结果集中,因为它是第4项。注意第1期是第1期,第2期是第2期,第3期是第3期
答案 0 :(得分:1)
使用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();
答案 1 :(得分:0)
查看https://laravel.com/docs/5.4/queries#where-clauses以获取更多文档,但您可以清理where where子句(您可以更改文档以表示您在右上角使用的laravel版本)。
而不是sub_str = 'qw'
{k: v for k, v in dict_example if v == sub_str}
执行:
->where('students.id', '=', '1', 'and', 'scores.term_id', '=', '1', 'or', 'scores.term_id', '=', '2', 'or', 'scores.term_id', '=', '3')