Laravel whereBetween 带可选参数
Laravel whereBetween with optional parameter
我需要使用 whereBetween
子句构造查询,但有一点我没有找到适用于我的情况的答案。我需要,因为当 from
参数不存在时,将其视为从头开始查询。如果 to
参数不存在,则需要查看前面提到的参数之后的所有内容。
当前查询:
Vehicle::whereBetween("updated_at", [$dates->start_date, $dates->end_date])->with("something")->get();
我想要的样子:
Vehicle::whereBetween("updated_at", "lookup from start date if present, if not, look from beginning", "lookup to said end date if it's present, if not, look up till the end"])->with("something")->get();
我想问的是,当参数不存在时,输入什么是合适的,所以它按照我描述的方式工作?
编辑:
如果省略,开始日期,查询工作正常。如果省略结束日期,则在最佳情况下查询 return 零。最坏的情况,抛出一个错误。
我尝试将 null
、空字符串、false、零 (0) 作为结束日期,但没有任何效果。
不使用 whereBetween
并有条件地添加 where
子句会更有意义。您可以使用 when() 方法执行此操作:
Vehicle::with("something")
->when($dates->start_date, function ($query, $date) {
$query->where('updated_at', '>=', $date);
})
->when($dates->end_date, function ($query, $date) {
$query->where('updated_at', '<=', $date);
})
->get();
我需要使用 whereBetween
子句构造查询,但有一点我没有找到适用于我的情况的答案。我需要,因为当 from
参数不存在时,将其视为从头开始查询。如果 to
参数不存在,则需要查看前面提到的参数之后的所有内容。
当前查询:
Vehicle::whereBetween("updated_at", [$dates->start_date, $dates->end_date])->with("something")->get();
我想要的样子:
Vehicle::whereBetween("updated_at", "lookup from start date if present, if not, look from beginning", "lookup to said end date if it's present, if not, look up till the end"])->with("something")->get();
我想问的是,当参数不存在时,输入什么是合适的,所以它按照我描述的方式工作?
编辑:
如果省略,开始日期,查询工作正常。如果省略结束日期,则在最佳情况下查询 return 零。最坏的情况,抛出一个错误。
我尝试将 null
、空字符串、false、零 (0) 作为结束日期,但没有任何效果。
不使用 whereBetween
并有条件地添加 where
子句会更有意义。您可以使用 when() 方法执行此操作:
Vehicle::with("something")
->when($dates->start_date, function ($query, $date) {
$query->where('updated_at', '>=', $date);
})
->when($dates->end_date, function ($query, $date) {
$query->where('updated_at', '<=', $date);
})
->get();