【发布时间】:2020-12-16 01:50:00
【问题描述】:
我正在尝试过滤表,但某些请求值可能为空。有没有办法让它更简单,还是我需要创建多个 IF 语句?
$archives = Archive::when($vehicle, function ($query) use ($vehicle) {
return $query->where('vehicle_id', $vehicle);
})->when($month, function ($query) use ($month) {
return $query->whereMonth('startduration', $month)
->orWhereMonth('endduration', $month);
})->when($year, function ($query) use ($year) {
return $query->whereYear('startduration', $year)
->orWhereYear('endduration', $year);
})->when($status, function ($query) use ($status) {
return $query->where('archivedtype', $status);
})->orderBy('endduration', 'desc')->paginate(20);
【问题讨论】:
-
最好将有效数据传递给查询函数。使用多个 If 检查它是否为空。古语说“垃圾进就是垃圾出”。由此,您可以在需要时正确出错,或者修改查询以仅执行应做的事情。
标签: php mysql eloquent laravel-8