Skip to content

Commit 0c94107

Browse files
committed
fix: filtering by date field in laravel 10+
1 parent 36b4e6e commit 0c94107

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/Drivers/Standard/QueryBuilder.php

+11-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Carbon\Carbon;
66
use Illuminate\Database\Eloquent\Builder;
7+
use Illuminate\Database\Eloquent\Model;
78
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
89
use Illuminate\Database\Eloquent\Relations\MorphTo;
910
use Illuminate\Database\Eloquent\Relations\Relation;
@@ -194,8 +195,17 @@ protected function buildFilterNestedQueryWhereClause(
194195
$query,
195196
bool $or = false
196197
) {
198+
/** @var Model $resourceModel */
199+
$resourceModel = (new $this->resourceModelClass);
200+
201+
$dateCasts = collect($resourceModel->getCasts())->filter(function(string $type) {
202+
return in_array($type, ['date', 'datetime']);
203+
})->keys()->toArray();
204+
205+
$dateFields = array_merge($resourceModel->getDates(), $dateCasts);
206+
197207
$treatAsDateField = $filterDescriptor['value'] !== null &&
198-
in_array($filterDescriptor['field'], (new $this->resourceModelClass)->getDates(), true);
208+
in_array($filterDescriptor['field'], $dateFields , true);
199209

200210
if ($treatAsDateField && Carbon::parse($filterDescriptor['value'])->toTimeString() === '00:00:00') {
201211
$constraint = 'whereDate';

tests/Fixtures/app/Models/Post.php

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class Post extends Model
3131
'meta' => 'array',
3232
'options' => 'array',
3333
'stars' => 'float',
34+
'publish_at' => 'datetime',
3435
];
3536

3637
/**

0 commit comments

Comments
 (0)