@@ -122,7 +122,12 @@ function ($relationQuery) use ($relationField, $filterDescriptor) {
122
122
);
123
123
}
124
124
} else {
125
- $ this ->buildFilterQueryWhereClause ($ this ->getQualifiedFieldName ($ filterDescriptor ['field ' ]), $ filterDescriptor , $ query , $ or );
125
+ $ this ->buildFilterQueryWhereClause (
126
+ $ this ->getQualifiedFieldName ($ filterDescriptor ['field ' ]),
127
+ $ filterDescriptor ,
128
+ $ query ,
129
+ $ or
130
+ );
126
131
}
127
132
}
128
133
}
@@ -138,8 +143,16 @@ function ($relationQuery) use ($relationField, $filterDescriptor) {
138
143
*/
139
144
protected function buildFilterQueryWhereClause (string $ field , array $ filterDescriptor , $ query , bool $ or = false )
140
145
{
141
- if (!is_array ($ filterDescriptor ['value ' ])) {
142
- $ query ->{$ or ? 'orWhere ' : 'where ' }($ field , $ filterDescriptor ['operator ' ], $ filterDescriptor ['value ' ]);
146
+ if ($ filterDescriptor ['value ' ] !== null &&
147
+ in_array ($ filterDescriptor ['field ' ], (new $ this ->resourceModelClass )->getDates (), true )
148
+ ) {
149
+ $ constraint = 'whereDate ' ;
150
+ } else {
151
+ $ constraint = 'where ' ;
152
+ }
153
+
154
+ if (!is_array ($ filterDescriptor ['value ' ]) || $ constraint === 'whereDate ' ) {
155
+ $ query ->{$ or ? 'or ' . ucfirst ($ constraint ) : $ constraint }($ field , $ filterDescriptor ['operator ' ], $ filterDescriptor ['value ' ]);
143
156
} else {
144
157
$ query ->{$ or ? 'orWhereIn ' : 'whereIn ' }($ field , $ filterDescriptor ['value ' ], 'and ' , $ filterDescriptor ['operator ' ] === 'not in ' );
145
158
}
@@ -156,8 +169,12 @@ protected function buildFilterQueryWhereClause(string $field, array $filterDescr
156
169
* @param bool $or
157
170
* @return Builder|Relation
158
171
*/
159
- protected function buildPivotFilterQueryWhereClause (string $ field , array $ filterDescriptor , $ query , bool $ or = false )
160
- {
172
+ protected function buildPivotFilterQueryWhereClause (
173
+ string $ field ,
174
+ array $ filterDescriptor ,
175
+ $ query ,
176
+ bool $ or = false
177
+ ) {
161
178
if (!is_array ($ filterDescriptor ['value ' ])) {
162
179
$ query ->{$ or ? 'orWherePivot ' : 'wherePivot ' }($ field , $ filterDescriptor ['operator ' ], $ filterDescriptor ['value ' ]);
163
180
} else {
@@ -212,11 +229,19 @@ function ($relationQuery) use ($relationField, $requestedSearchString) {
212
229
/**
213
230
* @var Builder $relationQuery
214
231
*/
215
- return $ relationQuery ->where ($ relationField , 'like ' , '% ' .$ requestedSearchString .'% ' );
232
+ return $ relationQuery ->where (
233
+ $ relationField ,
234
+ 'like ' ,
235
+ '% ' . $ requestedSearchString . '% '
236
+ );
216
237
}
217
238
);
218
239
} else {
219
- $ whereQuery ->orWhere ($ this ->getQualifiedFieldName ($ searchable ), 'like ' , '% ' .$ requestedSearchString .'% ' );
240
+ $ whereQuery ->orWhere (
241
+ $ this ->getQualifiedFieldName ($ searchable ),
242
+ 'like ' ,
243
+ '% ' . $ requestedSearchString . '% '
244
+ );
220
245
}
221
246
}
222
247
}
@@ -257,7 +282,9 @@ public function applySortingToQuery($query, Request $request): void
257
282
}
258
283
259
284
$ relationTable = $ this ->relationsResolver ->relationTableFromRelationInstance ($ relationInstance );
260
- $ relationForeignKey = $ this ->relationsResolver ->relationForeignKeyFromRelationInstance ($ relationInstance );
285
+ $ relationForeignKey = $ this ->relationsResolver ->relationForeignKeyFromRelationInstance (
286
+ $ relationInstance
287
+ );
261
288
$ relationLocalKey = $ this ->relationsResolver ->relationLocalKeyFromRelationInstance ($ relationInstance );
262
289
263
290
$ query ->leftJoin ($ relationTable , $ relationForeignKey , '= ' , $ relationLocalKey )
0 commit comments