查询 eloquent where 子句中的所有值
Posted
技术标签:
【中文标题】查询 eloquent where 子句中的所有值【英文标题】:Querying all values in eloquent where clause 【发布时间】:2022-01-17 12:30:07 【问题描述】:我正在尝试编写一个基于日期获取结果的雄辩查询。但日期将分别给出年、月和日。当我还为一个或多个输入传递“全部”时,我希望查询能够正常工作(例如,如果一天被指定为“全部”,则一个月中的所有天)。我知道我可以使用不同的“if”组合来做到这一点,但我想有一些简单的方法来做到这一点。有什么办法吗?
这是我写的代码。
$year = $request->input('year');
$month = $request->input('month');
$day = $request->input('day');
$reports = DailyReport::whereYear('date', $year)
->whereMonth('date', $month)
->whereDay('date', $day)->get();
【问题讨论】:
不,我认为某种条件是必要的,例如使用when
【参考方案1】:
试试这个
$reports = DailyReport::when($request->has('year'), function ($query) use ($request)
$query->whereYear('date', $request->year);
)
->when($request->has('month'), function ($query) use ($request)
$query->whereMonth('date', $request->month);
)
->when($request->has('day'), function ($query) use ($request)
$query->whereDay('date', $request->day);
)->get();
laravel documentation
【讨论】:
【参考方案2】:当然,在查看了所有有用的答案之后,这终于奏效了。
$year = $request->input('year');
$month = $request->input('month');
$day = $request->input('day');
$reports = DailyReport::when($year!='all', function ($query) use($year)
return $query->whereYear('date', $year);
)
->when($month!='all', function ($query) use($month)
return $query->whereMonth('date', $month);
)
->when($day!='all', function ($query) use($day)
return $query->whereDay('date', $day);
)->get();
【讨论】:
以上是关于查询 eloquent where 子句中的所有值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel Eloquent 创建多个 Where 子句查询?
如何使用 Laravel Eloquent 创建多个 Where 子句查询?
与where子句查询的Eloquent嵌套关系在false条件下返回集合