Laravel - 使用 eloquent 在开始日期和结束日期之间选择行

Posted

技术标签:

【中文标题】Laravel - 使用 eloquent 在开始日期和结束日期之间选择行【英文标题】:Laravel - select row between start date and end date using 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的第一个参数应该是列名,而不是值 【参考方案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);

我希望这对你有用:)

【讨论】:

以上是关于Laravel - 使用 eloquent 在开始日期和结束日期之间选择行的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent使用小记

Laravel - Eloquent 连接

使用 Laravel Eloquent 使用复合键更新表

5 个 Laravel Eloquent 小技巧

Laravel Eloquent 多列 IN 子句

如何使用 Eloquent 在 Laravel 中设置 AUTO_INCREMENT?