从Laravel的Date列查询两个Date之间的数据

时间:2019-08-28 13:11:09

标签: laravel vue.js

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

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

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

My Controller

  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'])->get();

        if($request->start && $request->end) {
            $expenses->where(function($q) use ($request) {
                $q->whereBetween('date', array($request->start, $request->end));
            });
        }

        return ExpenseResource::collection($expenses);

    }

我认为我的控制器做错了,但是我仍然无法解决。.

预先感谢...

2 个答案:

答案 0 :(得分:0)

希望这个答案有帮助

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()

,然后将您的URL更改为 127.0.0.1:8000/api/expense?start=2019-08-01&end=2019-08-04

答案 1 :(得分:0)

尝试类似

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

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

            ->get();