Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

freemium's avatar

Search data between two date passed from the form

who can i implement searching the data by passing the two date from the form help me to correct the query below

institutes table

| id | name |

users table

|  id  |  institute_id |  name|

deliveries table

|id | user_id| name

data passed from form can be institute_id or user_id or (start_date or end date ) from abnormal or all


        $deliveries = Delivery::when($request->search_query, function ($query, $request) {
            return $query->where(function ($query) use ($request) {
                $query->whereBetween('created_at', [$request->start_date, $request->end_date]);
            });
        })->when($request->institute && $request->institute != 'all', function ($query) use ($request) {
            return $query->whereHas('user.institute', function ($query) use ($request) {
                $query->where('id', $request->institute_id);
            });
        })->when($request->user && $request->user != 'all', function ($query) use ($request) {
            return $query->whereHas('user', function ($query) use ($request) {
                $query->where('id', $request->user_id);
            });
        })->orderBy('id', 'desc')->get();


        dd($deliveries);

0 likes
4 replies
The-skeptic 's avatar

Hello friend, do you need to do a search between a range of dates?

kevinbui's avatar
kevinbui
Best Answer
Level 41

What results do you have so far?

I rewrite the first part of your query and hope it will help:

Delivery::when($request->filled('start_date'), function ($query, $request) {
    return $query->where('created_at', '>=', $request->start_date);
})
->when($request->filled('end_date'), function ($query, $request) {
    return $query->where('created_at', '<=', $request->end_date);
})

Or simpler:

Delivery::when(request()->filled('start_date'), function ($query) {
    return $query->where('created_at', '>=', request('start_date'));
})
->when(request()->filled('end_date'), function ($query) {
    return $query->where('created_at', '<=', request('end_date'));
})
freemium's avatar

last one query work but little changes require

 $start_date = date('Y-m-d 00:00:00', strtotime($request->get('start_date')));

        $end_date = date('Y-m-d 23:59:59', strtotime($request->get('end_date')));


        $deliveries = Delivery::when(request()->filled('start_date'), function ($query) use ($start_date) {
            return $query->where('created_at', '>=', $start_date);
        })
            ->when(request()->filled('end_date'), function ($query) use ($end_date) {
                return $query->where('created_at', '<=', $end_date);
            })->when($request->institute && $request->institute != 'all', function ($query) use ($request) {
                return $query->whereHas('user.institute', function ($query) use ($request) {
                    $query->where('id', $request->institute);
                });
            })->when($request->user && $request->user != 'all', function ($query) use ($request) {
                return $query->whereHas('user', function ($query) use ($request) {
                    $query->where('id', $request->user);
                });
            })->with('user', 'user.institute', 'abnormals')->orderBy('id', 'desc')->get();

1 like

Please or to participate in this conversation.