【问题标题】:Laravel - select row between start date and end date using eloquentLaravel - 使用 eloquent 在开始日期和结束日期之间选择行
【发布时间】:2017-11-02 03:57:30
【问题描述】:

我想把这个查询转换成 laravel eloquent,

select * from schedule where (now() between start_date and end_date);

我尝试使用 whereBetween,但出现了一些错误。

$schedule = Schedule::whereBetween(Carbon::now(), ['start_date', 'end_date'])->get();

错误看起来像这样

Connection.php 第 647 行中的 QueryException: SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'2017-06-01 06:17:30'(SQL:select * from schedule where 2017-06-01 06:17:30 在 start_date 和 end_date 之间)

有什么想法吗?

【问题讨论】:

  • whereBetween的第一个参数应该是列名,而不是值

标签: php laravel eloquent


【解决方案1】:
$from = $request->from;
$to = $request->to;
$title="Sales From: ".$from." To: ".$to;
$sales = Sale::whereBetween('created_at', [$from.' 00:00:00',$to.' 23:59:59'])->get();

【讨论】:

    【解决方案2】:
    $schedule = Schedule::where('start_date', '<=', Carbon::now())
        ->where('end_date', '>=', Carbon::now())
        ->get();
    

    或者

    $schedule = Schedule::whereRaw('(now() between start_date and end_date)')->get();
    

    【讨论】:

    • 你能帮我查询一下吗,我有 2 列 start_at 和 end_at 并且需要这两个日期之间的数据,但我还有 2 个日期要检查,我不会检查使用 now() ,我有 2 个新日期 start_at 和 end_at
    【解决方案3】:

    whereBetween 仅在您想查找单列介于 2 个值之间的行时使用,您要做的是:

    $now = Carbon::now();
    $schedule = Schedule::where('start_date', '<=', $now)
        ->where('end_date', '>=', $now)
        ->get();
    

    【讨论】:

      【解决方案4】:

      whereBetween 应该使用like this-&gt;whereBetween('loc_lng', array(-0.24272918701172, -0.24272918701172)),其第一个参数是列名,第二个是区域。

      在您的情况下,您可以使用-&gt;where('start_date', '&lt;' Carbon::now())-&gt;where('end_date', '&gt;' Carbon::now());

      【讨论】:

      • 你能帮我查询一下吗,我有 2 列 start_at 和 end_at 并且需要这两个日期之间的数据,但我还有 2 个日期要检查,我不会检查使用 now() ,我有 2 个新日期 start_at 和 end_at
      • 您可以在我的回答中使用第二种方式,并将Carbon::now()更改为您的时间。
      【解决方案5】:

      您可以使用whereBetween('date_field',[$from_date, $to_date]) 获取两个日期之间的数据,但它应该是数组格式。

      $products = Sale::with('products')
          ->whereBetween('date',[$from_date, $to_date])
          ->get();
      return response()->json($products);
      

      您还可以将whereBetween(whereBetween('date_field',[$from_date, $to_date])) 与多个 where 条件一起使用,例如:

      $products = Sale::with('products')
          ->whereBetween('date',[$from_date, $to_date])
          ->where(function ($query) use ($search) {
          $query->where('employee_id', 'like', '%'.$search.'%')
                ->orWhere('employee_name', 'like', '%'.$search.'%');
          })
          ->get();
      return response()->json($products);
      

      我希望这对你有用:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多