我从POST表单中收到了一些变量,如下所示:
$search = $request->search;
$day = $request->day;
$month = $request->month;
$year = $request->year;
$status = $request->status;
实际上我还有更多,因此我的问题。我使用这些变量来查询我的数据库,使用范围。我现在这样做的方式:
链接范围:
$appointments = Appointment::latest('created_at')->search(search)->day($day)->month($month)->get(); // and so on..
但这只有在我使用以下范围时才有效:
public function scopeSearch($query, $date)
{
if($search)
{
return $query->whereDate('start', '=', $date);
} else {
return false;
}
}
因为使用上面的链接方法,如果没有搜索到任何内容,我仍然直接返回查询,显然没有找到结果。我改变了这样的范围:
public function scopeSearch($query, $value)
{
return $query->whereDate('condition', '=', $value);
}
但是我必须在我的控制器中执行以下操作:
$appointments = Appointment::latest('created_at');
if($day) {
$appointments = $appointments->month($day);
}
if($month) {
$appointments = $appointments->month($month);
}
if($year) {
$appointments = $appointments->month($year);
}
if($status) {
$appointments = $appointments->month($status);
}
$appointments = $appointments->get();
是的,这很有效,但这很愚蠢。有没有办法做到这一点,我还没有意识到呢?我是否应该使用foreach来代替或者是否有一种更清洁的laravel方式?