具有 DATE mysql 功能的 Laravel 查询生成器

Posted

技术标签:

【中文标题】具有 DATE mysql 功能的 Laravel 查询生成器【英文标题】:Laravel query Builder with DATE mysql function 【发布时间】: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)。我知道它有点太冗长了,但是……最简单的方法…… 【参考方案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();

【讨论】:

以上是关于具有 DATE mysql 功能的 Laravel 查询生成器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 将日期发布为 JSON 并保存为 MySQL 中的 DATE 约束

Laravel mysql,否则条件

如何使用 laravel 或 mysql 创建嵌套的 json?

更快的 Laravel 迁移,用于测试具有大量表的项目

Laravel 5.5 枢轴连接以获取具有主要 MySQL 结果的枢轴值

Laravel:如何通过选择两列进行分组具有不同的值