Arafat Rahman
Arafat Rahman

Reputation: 1015

How to retrieve data of current date in Laravel

I want to retrieve data of today from my database in Laravel.

I have already googling and applied several methods but not getting my answer.

PrescriptionTbl::whereDate('created_at', '=', $today)->get();

Where PrescriptionTbl is the model and today is current date like 2019-2-19.But got NULL array.

To check the SQL I have used toSQL() instead of get()...and it shows below SQL in the browser

 select * from `prescription_tbls` where date(`created_at`) = ?

I have also use Carbon but also get a NULL array

PrescriptionTbl::whereDate('created_at', Carbon::today())->get();

How to solve it? Anybody Help Please?

Upvotes: 6

Views: 37218

Answers (7)

ObiTech Invents
ObiTech Invents

Reputation: 568

Another way to get the exact record of today's transactions is by using the like operator in conjunction with Carbon for example in Laravel 9+:

<?php

$date = Carbon::now();

    $todaySales = Sales::query()
        ->where("created_at", "like", "%{$date->today()->toDateString()}%")
        ->get();

    dd($todaySales);

The above will return an array of records for today.

Now why do we use this approach? I want you to take a good look at the created_at column field this is how it looks like: 2023-04-14 11:33:23. With this using where statement the result will be an empty array why? Because where statement uses an = operator by default which means the sql statement will attempt to match the records exactly the way it is. Here is how the query will look like:


SELECT * FROM sales WHERE created_at={$todaysDate}
// in this case todays date is 2023-04-14 
// but the value in the database is rather containing time 
// e.g.: 023-04-14 11:33:23 so definitely the select operation will fail and return empty results.

Looking at the above query there's no way the sql query is going to evaluate to any result but with the like operator the sql query will attempt to search for records that has todays date in them: 2023-04-14 which will return all records for today. If you're looking to retrieve records from a range let's say from Monday through to Friday you can use Laravel whereBetween() method otherwise try this approach. Hope this help you solve the problem.

You can also checkout this article for more info

Upvotes: 0

Kalyan Halder
Kalyan Halder

Reputation: 1585

Using Carbon ( use Carbon\Carbon; ) its simple and pretty

PrescriptionTbl::whereDate('created_at',  Carbon::today()->toDateString())->get();

Upvotes: 1

Pascal Tovohery
Pascal Tovohery

Reputation: 986

You can get it via new DateTime() class

PrescriptionTbl::whereDate('created_at', '=', (new DateTime)->format('Y-m-d'))->get();

Upvotes: 2

Keshav Kothari
Keshav Kothari

Reputation: 379

You can use whereBetween in which you can provide start date of today as 2019-01-01 00:00:00 and end date as 2019-01-01 23:59:59

For reference How to query between two dates using Laravel and Eloquent ORM?

Upvotes: 0

FGDeveloper
FGDeveloper

Reputation: 1050

You can use that;

PrescriptionTbl::whereDate('created_at', date('Y-m-d'))->get();

Upvotes: 12

Ahmed Nasr
Ahmed Nasr

Reputation: 119

created_at is a timestamp which is date/time format, so, equal operator wouldn't work unless you provided the whole timestamp.

you can use whereDate method to compare dates only as mentioned in documentation

PrescriptionTbl::whereDate('created_at', $today)->get();

Upvotes: 0

Sahil Darji
Sahil Darji

Reputation: 234

You can try this one:

PrescriptionTbl::where('created_at', '<=', date('Y-m-d 00:00:00'))->get();

Upvotes: 0

Related Questions