@@ -194,31 +194,33 @@ protected function applyFilterText(FilterText $filter): void
194
194
$ bigOrArgs = [];
195
195
$ condition = $ filter ->getCondition ();
196
196
197
+ $ operator = $ filter ->hasConjunctionSearch () ? 'AND ' : 'OR ' ;
198
+
197
199
foreach ($ condition as $ column => $ value ) {
198
200
$ like = '( ' ;
199
201
$ args = [];
200
202
201
203
if ($ filter ->isExactSearch ()) {
202
- $ like .= sprintf ('%s = ? OR ' , $ column );
204
+ $ like .= sprintf ('%s = ? %s ' , $ column, $ operator );
203
205
$ args [] = sprintf ('%s ' , $ value );
204
206
} else {
205
207
$ words = $ filter ->hasSplitWordsSearch () === false ? [$ value ] : explode (' ' , $ value );
206
208
207
209
foreach ($ words as $ word ) {
208
- $ like .= sprintf ('%s LIKE ? OR ' , $ column );
210
+ $ like .= sprintf ('%s LIKE ? %s ' , $ column, $ operator );
209
211
$ args [] = sprintf ('%%%s%% ' , $ word );
210
212
}
211
213
}
212
214
213
- $ like = substr ($ like , 0 , strlen ($ like ) - 4 ) . ') ' ;
215
+ $ like = substr ($ like , 0 , strlen ($ like ) - ( strlen ( $ operator ) + 2 ) ) . ') ' ;
214
216
215
217
$ or [] = $ like ;
216
- $ bigOr .= sprintf ('%s OR ' , $ like );
218
+ $ bigOr .= sprintf ('%s %s ' , $ like, $ operator );
217
219
$ bigOrArgs = [...$ bigOrArgs , ...$ args ];
218
220
}
219
221
220
222
if (count ($ or ) > 1 ) {
221
- $ bigOr = substr ($ bigOr , 0 , strlen ($ bigOr ) - 4 ) . ') ' ;
223
+ $ bigOr = substr ($ bigOr , 0 , strlen ($ bigOr ) - ( strlen ( $ operator ) + 2 ) ) . ') ' ;
222
224
223
225
$ query = [...[$ bigOr ], ...$ bigOrArgs ];
224
226
0 commit comments