mysql - 我可以在 laravel 数据库查询中使用 if 条件吗?
问题描述
我可以if
在查询中使用条件吗,我想在$request->review = 7
显示 7 天数据时使用过滤器,否则条件默认为 30 天数据。
$reviews = Review::orderBy('created_at', 'DESC')
->orWhere('created_at', '>=', if($request->review == "7"){ $month = 7 })
->where('listing_id', $id)
->where('user_id', Auth::User()->id)
->paginate(6, ['*'], 'review');
解决方案
你可以使用这样的东西:
$reviews = Review::orderBy('created_at', 'DESC')
->orWhere('created_at','>=',now()->subDays($request->review == 7 ? 7 : 30)
->where('listing_id', $id)
->where('user_id', Auth::user()->id)
->paginate(6, ['*'], 'review');
但请记住,您可能仍然会得到错误的结果。
您应该确保在正确的位置将括号添加到查询中,否则您可能会得到其他用户的结果,所以实际上您很可能想要使用这样的东西:
$reviews = Review::orderBy('created_at', 'DESC')
->where(function($q) use ($request) {
$q->where('listing_id', $id)
->orWhere('created_at','>=',now()->subDays($request->review == 7 ? 7 : 30)
})
->where('user_id', Auth::user()->id)
->paginate(6, ['*'], 'review');
但你还没有解释你想从数据库中得到什么确切的结果,所以这只是一个提示。
推荐阅读
- python - 如何在 Zeppelin Notebook 中使一列 python DataFrame 可编辑?
- php - 在 docker 和 ubuntu 中从上游读取响应标头时失败(104:对等方重置连接)
- angular - Angular 5 typescript 在服务中调用服务并合并数据
- python - Django CMS:没有 ForiengKey 的应用程序插件
- r - 堆叠条形图,每个堆叠独立的填充顺序
- c# - 我对 ThreadExecutionState 做错了什么?
- apache - 如何自动将用户从 http:// 重定向到 https://?
- php - WordPress 中的 Cron 插件
- python - 使用 xmlns 解析 XML
- javascript - javascript中的矩阵乘法