【问题标题】:Laravel query Builder with DATE mysql function具有 DATE mysql 功能的 Laravel 查询生成器
【发布时间】:2017-12-02 07:02:21
【问题描述】:

您好,我在我的 laravel 项目中有一个查询,它应该检索范围之间的日期。我的查询是:

 $dateFrom = date("Y-m-d", strtotime($request->dateFrom));
      $dateTo = date("Y-m-d", strtotime($request->dateTo));
      $posts = DB::table('posts')->join('categories','posts.category_id','=','categories.id')->
                join('users','posts.user_id','=','users.id')
                ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
                ->whereBetween('posts.created_at',[$dateFrom,$dateTo])
                ->get();

我想在posts.created_at 列上使用 DATE mysql_function,但我不知道该怎么做。下面的查询不起作用:

$dateFrom = date("Y-m-d", strtotime($request->dateFrom));
      $dateTo = date("Y-m-d", strtotime($request->dateTo));
       $posts = DB::table('posts')->join('categories','posts.category_id','=','categories.id')->
                join('users','posts.user_id','=','users.id')
                ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
                ->whereBetween('DATE(posts.created_at)',[$dateFrom,$dateTo])
                ->get();

我很乐意提供帮助。最好的问候;)

【问题讨论】:

  • 你为什么不用两个whereDate来代替..?类似->whereDate('posts.created_at', '>=', $dateFrom)->whereDate('posts.created_at', '<=', $dateTo)。我知道它有点太冗长了,但是……最简单的方法……

标签: mysql laravel laravel-query-builder


【解决方案1】:

更改->whereBetween('DATE(posts.created_at)'

->whereBetween(DB::raw('DATE(posts.created_at)'))

如果您想在查询中添加一些原始表达式,您可以使用DB::row 方法,如laravel documentation 中所述

【讨论】:

    【解决方案2】:

    尝试像这样使用Carbon

    use Carbon\Carbon;
    ...
    
    $dateFrom = Carbon::parse($request->dateFrom);
    $dateTo = Carbon::parse($request->dateTo);
    $posts = DB::table('posts')
        ->join('categories','posts.category_id','=','categories.id')
        ->join('users','posts.user_id','=','users.id')
        ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
        ->whereBetween('posts.created_at',[$dateFrom,$dateTo])
        ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2014-12-15
      相关资源
      最近更新 更多