首页 > 解决方案 > 我可以在 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');

标签: mysqllaravellaravel-5eloquentlaravel-query-builder

解决方案


你可以使用这样的东西:

$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');

但你还没有解释你想从数据库中得到什么确切的结果,所以这只是一个提示。


推荐阅读