@@ -549,9 +549,11 @@ protected function parseFilter($filterParams)
549
549
'max ' => '<= ' ,
550
550
'lk ' => 'LIKE ' ,
551
551
'not-lk ' => 'NOT LIKE ' ,
552
+ 'in ' => 'IN ' ,
553
+ 'not-in ' => 'NOT IN ' ,
552
554
'not ' => '!= ' ,
553
555
];
554
-
556
+
555
557
$ supportedPrefixesStr = implode ('| ' , $ supportedPostfixes );
556
558
$ supportedPostfixesStr = implode ('| ' , array_keys ($ supportedPostfixes ));
557
559
@@ -576,35 +578,50 @@ protected function parseFilter($filterParams)
576
578
577
579
$ column = $ keyMatches [2 ];
578
580
579
- $ values = explode ('| ' , $ filterParamValue );
581
+ if ($ comparator == 'IN ' )
582
+ {
583
+ $ values = explode (', ' , $ filterParamValue );
580
584
581
- if (count ($ values ) > 1 )
585
+ $ this ->query ->whereIn ($ column , $ values );
586
+ }
587
+ else if ($ comparator == 'NOT IN ' )
582
588
{
583
- $ this ->query ->where (function ($ query ) use ($ column , $ comparator , $ values )
584
- {
585
- foreach ($ values as $ value )
586
- {
587
- if ($ comparator == 'LIKE ' || $ comparator == 'NOT LIKE ' ) $ value = preg_replace ('/(^\*|\*$)/ ' , '% ' , $ value );
589
+ $ values = explode (', ' , $ filterParamValue );
588
590
589
- //Link the filters with AND of there is a "not" and with OR if there's none
590
- if ($ comparator == '!= ' || $ comparator == 'NOT LIKE ' )
591
- {
592
- $ query ->where ($ column , $ comparator , $ value );
593
- }
594
- else
595
- {
596
- $ query ->orWhere ($ column , $ comparator , $ value );
597
- }
598
- }
599
- });
591
+ $ this ->query ->whereNotIn ($ column , $ values );
600
592
}
601
593
else
602
594
{
603
- $ value = $ values [0 ];
595
+ $ values = explode ('| ' , $ filterParamValue );
596
+
597
+ if (count ($ values ) > 1 )
598
+ {
599
+ $ this ->query ->where (function ($ query ) use ($ column , $ comparator , $ values )
600
+ {
601
+ foreach ($ values as $ value )
602
+ {
603
+ if ($ comparator == 'LIKE ' || $ comparator == 'NOT LIKE ' ) $ value = preg_replace ('/(^\*|\*$)/ ' , '% ' , $ value );
604
+
605
+ //Link the filters with AND of there is a "not" and with OR if there's none
606
+ if ($ comparator == '!= ' || $ comparator == 'NOT LIKE ' )
607
+ {
608
+ $ query ->where ($ column , $ comparator , $ value );
609
+ }
610
+ else
611
+ {
612
+ $ query ->orWhere ($ column , $ comparator , $ value );
613
+ }
614
+ }
615
+ });
616
+ }
617
+ else
618
+ {
619
+ $ value = $ values [0 ];
604
620
605
- if ($ comparator == 'LIKE ' || $ comparator == 'NOT LIKE ' ) $ value = preg_replace ('/(^\*|\*$)/ ' , '% ' , $ value );
621
+ if ($ comparator == 'LIKE ' || $ comparator == 'NOT LIKE ' ) $ value = preg_replace ('/(^\*|\*$)/ ' , '% ' , $ value );
606
622
607
- $ this ->query ->where ($ column , $ comparator , $ value );
623
+ $ this ->query ->where ($ column , $ comparator , $ value );
624
+ }
608
625
}
609
626
}
610
627
}
0 commit comments