我试图在两个不同的日期之间使用whereBetween,但是我得到一个错误“调用一个成员函数whereBetween()on integer”。我使用bootstrap datepicker从用户获取2个日期输入。我的代码如下:
我的表格如下:

<div class="form-group">
 <label for="start_date">From:</label><input type="text" name="startdate" id="startdate">
</div>
<div class="form-group">
 <label for="enddate">To:</label><input type="text" id="enddate" name="enddate">
</div>

我的问题如下:
$client_ids = Array
              (
                 [0] => 1
                 [1] => 5
               )
$start = 2017-06-01;
$end = 2017-06-02;

$results = DB::table('lead_audit AS l')
             ->leftjoin('suppliers AS s', 's.id', '=', 'l.supplier_id')
             ->leftjoin('campaigns AS c', 'c.id', '=', 'l.campaign_id')
             ->select('s.name AS Supplier', 'c.name AS Campaign', 'l.disposition AS Disposition')
             ->count()
             ->whereBetween('l.received', [$start, $end])
             ->whereIn('l.client_id', $client_ids)
             ->groupBy('s.name', 'c.name', 'l.disposition')
             ->orderBy('s.name')
             ->orderBy('c.name')
             ->orderBy('l.disposition')
             ->get();

我在谷歌上搜索了一下,然后我尝试了一种解决方案“用碳物体包裹日期”,如下所示
在我的控制器上,我把这一行“use Carbon\Carbon;”改为下面的查询:
->whereBetween('l.received', [new Carbon($start), new Carbon($end)])

但没有运气再次出现与“调用成员函数whereBetween()on integer”相同的错误。我也有一个疑问,上面完整查询的顺序是否正确?有人能帮我解决这个问题吗。谢谢。

最佳答案

问题是->count()后面跟着->whereBetween()
函数count()为您提供select()的行数,因此它返回一个整数。
您必须删除->count()并且查询应该可以工作。如果需要查询中的行数,可以执行以下操作:

$results = DB::table('lead_audit AS l')
         ->leftjoin('suppliers AS s', 's.id', '=', 'l.supplier_id')
         ->leftjoin('campaigns AS c', 'c.id', '=', 'l.campaign_id')
         ->select('s.name AS Supplier', 'c.name AS Campaign', 'l.disposition AS Disposition')
         ->whereBetween('l.received', [$start, $end])
         ->whereIn('l.client_id', $client_ids)
         ->groupBy('s.name', 'c.name', 'l.disposition')
         ->orderBy('s.name')
         ->orderBy('c.name')
         ->orderBy('l.disposition')
         ->get();
$num_rows = count($results);

查询生成器还提供了多种聚合方法,如countmaxminavgsum。在构造查询之后,可以调用这些方法中的任何一个。
来源:https://laravel.com/docs/5.4/queries#aggregates

09-25 17:35