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
where2017-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,->whereBetween('loc_lng', array(-0.24272918701172, -0.24272918701172))
,其第一个参数是列名,第二个是区域。
在您的情况下,您可以使用->where('start_date', '<' Carbon::now())->where('end_date', '>' 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 在开始日期和结束日期之间选择行的主要内容,如果未能解决你的问题,请参考以下文章