从 Laravel 中的日期列查询两个日期之间的数据

Posted

技术标签:

【中文标题】从 Laravel 中的日期列查询两个日期之间的数据【英文标题】:Query Data Between Two Date from Date column in Laravel 【发布时间】:2020-01-01 17:33:49 【问题描述】:

我正在尝试从我的日期列中查询两个日期之间的数据。 我用api测试过

http://127.0.0.1:8000/api/expense?start=2019-08-01&2019-08-04

但它给了我所有不是日期范围的记录?

My Controller

公共功能索引(请求 $request) $user = auth()->user(); $expenses = Expense::whereHas('user', function($subQuery) use($user) return $subQuery->where('shop_id', '=', $user->shop_id); )->with(['user'])->get(); if($request->start && $request->end) $expenses->where(function($q) use ($request) $q->whereBetween('date', array($request->start, $request->end)); ); 返回 ExpenseResource::collection($expenses);

我认为我的控制器有问题,但我仍然无法弄清楚..

提前致谢...

【问题讨论】:

试试这个:127.0.0.1:8000/api/expense?start=2019-08-01&end=2019-08-04 收到此错误"explode() expects parameter 2 to be string, object given" 你在哪里使用了 explode() 函数? 就像你在我的控制器中看到的那样,我没有使用它.. @SandeepSudhakaran 没关系,兄弟现在我解决了。 【参考方案1】:

希望这个答案对你有帮助

public function index(Request $request)


    $user = auth()->user(); 

    $expenses = Expense::whereHas('user', function($subQuery) use($user)
        return $subQuery->where('shop_id', '=', $user->shop_id);
    )->with(['user']);

    if($request->start && $request->end) 
        $expenses->whereBetween('date', array($request->start, $request->end));
            
    return ExpenseResource::collection($expenses->get());


你所做的是你先get() 结果然后你应用whereBetween()。 相反,我先申请了whereBetween(),然后如果您的if 条件满足get()

并将您的网址更改为 127.0.0.1:8000/api/expense?start=2019-08-01&end=2019-08-04

【讨论】:

突然又报错Call to undefined method Illuminate\Database\Eloquent\Builder::mapInto() 对答案进行了一些编辑。在if 子句中。请也试试这个 好的。对答案又做了一个改动。 return ExpenseResource::collection($expenses->get()); 谢谢哥们。快乐编码【参考方案2】:

试试这样的

$users = User::select("users.*")

            ->whereBetween('created', ['2018-02-01', '2018-02-10'])

            ->get();

【讨论】:

以上是关于从 Laravel 中的日期列查询两个日期之间的数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 碳从两个日期获取年月格式

SQL查询从两列中检索两个日期之间的数据

sql查询计算不同列和相邻行的两个日期之间的差异

在两列上创建索引以检查日期是不是介于这两个列之间

如何使用 laravel 中的 query() 函数对两个日期之间的数据进行排序

Laravel 查询生成器 - 日期现在在哪里使用碳