Mysql Laravel:基于输入的查询。如果输入为空,则获取全部
我有一个日历(FullCalendar),用户可以根据几个参数(导师、二级导师、课程、地点)筛选结果。当用户对查询进行更改时,会出现以下代码 我遇到的问题是“或”。我真正想要的是一个IF输入为null然后get all 如果用户{获取lead_tutors_id=1和secondary_tutors_id=1的所有课程} 如果用户和位置{获取课程,其中用户如上所述,但位置_id=3} 等等等等 那么,如果只设置了一个或两个过滤器,有没有办法回过头来获得所有结果Mysql Laravel:基于输入的查询。如果输入为空,则获取全部,mysql,laravel,laravel-4,eloquent,Mysql,Laravel,Laravel 4,Eloquent,我有一个日历(FullCalendar),用户可以根据几个参数(导师、二级导师、课程、地点)筛选结果。当用户对查询进行更改时,会出现以下代码 我遇到的问题是“或”。我真正想要的是一个IF输入为null然后get all 如果用户{获取lead_tutors_id=1和secondary_tutors_id=1的所有课程} 如果用户和位置{获取课程,其中用户如上所述,但位置_id=3} 等等等等 那么,如果只设置了一个或两个过滤器,有没有办法回过头来获得所有结果 $current_events =
$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 = isset($var) ? $var : '';
$query .= isset($othervar) ? $othervar : '';
whereBetween(*)->orderBy(*)->whereRaw($query)
您需要记住的唯一一件事是在正确的位置插入'OR'。因此,请检查它是否是第一件要插入的东西,如果不是,请在它前面加上“或”
希望这些信息能对您有所帮助。在听取了Saint Genius的建议后,我的工作如下:
$built_query = [];
isset($lead_tutor) ? $built_query['lead_tutor'] = 'lead_tutor_id = ' . $lead_tutor . ' ' : null;
isset($secondary_tutor) ? $built_query['secondary_tutor'] = 'secondary_tutors_id = ' . $secondary_tutor . ' ' : null;
isset($location_id) ? $built_query['location'] = 'location_id = ' . $location_id : null;
isset($lesson_id) ? $built_query['lesson'] = 'lesson_id = ' . $lesson_id : null;
// Flatten the array so we can create a query and add the word ADD in between each element.
$built_query = implode(" AND ", $built_query);
// Run the query
$current_events = Calendar::whereBetween('date_from', [$start_time, $end_time])->orderBy('date_from')->whereRaw($built_query)->with('lessons', 'leadtutor', 'secondarytutor')->get();
1.您不需要在first
where
,2中使用闭包。您根本不需要whereRaw
,3。您可能需要关闭所有或的位置,4。到底是什么问题?查询范围不会因NULL而失败,所以请重新表述您的问题。感谢Saint Genius,是的,这很好。但是,如果我混合并或查询中断:“lead_tutors_id=1或secondary_tutors_id=1,lesson_id=1,location_id=1”。战斗第二回合!再次感谢。