【发布时间】:2014-11-24 15:20:05
【问题描述】:
我有一个日历 (FullCalendar),用户可以在其中根据几个参数(Tutor Secondary Tutor、Lesson、Location)过滤结果。当用户对查询进行更改时,它会点击以下代码。
我遇到的问题是“或”。我真正想要的是一个 IF 输入为空,然后全部获取。
如果用户 { 获取其中lead_tutor_id = 1 和secondary_tutors_id = 1 的所有课程} If User and Location { 获取用户所在位置的课程,但 location_id = 3 } 等等等等。
那么,如果只设置一个或两个过滤器,我有没有办法回退以获得所有结果?
$current_events = Calendar::Where(function($query) use ($start_time, $end_time, $tutor, $location, $lesson)
{
$query->whereBetween('date_from', [$start_time, $end_time])->orderBy('date_from')
->whereRaw('lead_tutor_id = ?
OR secondary_tutors_id = ?
OR location_id = ?
OR lesson_id = ?',
[
$tutor, // Input get() for user
$tutor, // Input get() for user
$location, // Input get() for location
$lesson, // Input get() for lesson
]
);
})->with('lessons', 'leadtutor', 'secondarytutor')->get();
我一直在使用 Query Scopes,但是如果将 NULL 值传递给它,这似乎会失败。
非常感谢任何帮助。提前致谢。
【问题讨论】:
-
1.你不需要在第一个
where关闭,2. 你根本不需要whereRaw,3. 你可能需要关闭所有orwheres,4. 到底是什么问题?查询范围不会因 NULL 而失败,因此请重新表述您的问题。
标签: mysql laravel laravel-4 eloquent