File tree Expand file tree Collapse file tree 6 files changed +81
-6
lines changed Expand file tree Collapse file tree 6 files changed +81
-6
lines changed Original file line number Diff line number Diff line change @@ -199,6 +199,28 @@ foreach ($qb->getResults() as $element){
199
199
}
200
200
```
201
201
202
+ ## Aliases
203
+
204
+ You can use aliases by using the ` as ` keyword as a delimiter. Do the following:
205
+
206
+ ``` php
207
+ use ArrayQuery\QueryBuilder;
208
+
209
+ $qb = QueryBuilder::create($array);
210
+ $qb
211
+ ->addCriterion('name as n', 'Ervin Howell')
212
+ ->addCriterion('username as user', 'Antonette')
213
+ ->addCriterion('address.street as add', 'Victor Plains');
214
+
215
+ foreach ($qb->getResults() as $element){
216
+ // ...
217
+ // now you have
218
+ // $element['n']
219
+ // $element['user']
220
+ // $element['add']
221
+ }
222
+ ```
223
+
202
224
## More examples
203
225
204
226
Please refer to [ QueryBuilderTest] ( https://github.com/mauretto78/array-query/blob/master/tests/QueryBuilderTest.php ) for more examples.
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * This file is part of the ArrayQuery package.
4
+ *
5
+ * (c) Mauro Cassani<https://github.com/mauretto78>
6
+ *
7
+ * For the full copyright and license information, please view the LICENSE
8
+ * file that was distributed with this source code.
9
+ */
10
+
11
+ namespace ArrayQuery ;
12
+
13
+ interface Constants
14
+ {
15
+ const ARRAY_SEPARATOR = '. ' ;
16
+ const ALIAS_DELIMITER = ' as ' ;
17
+ }
Original file line number Diff line number Diff line change 10
10
11
11
namespace ArrayQuery \Filters ;
12
12
13
+ use ArrayQuery \Constants ;
13
14
use ArrayQuery \Exceptions \NotValidKeyElementInArrayException ;
14
15
15
16
abstract class AbstractFilter
16
17
{
17
- const ARRAY_SEPARATOR = '. ' ;
18
-
19
18
/**
20
19
* @param $key
21
20
* @param $arrayElement
@@ -24,7 +23,7 @@ abstract class AbstractFilter
24
23
protected static function getArrayElementValueFromKey ($ key , $ arrayElement )
25
24
{
26
25
return self ::getValueFromKeysArray (
27
- explode (self ::ARRAY_SEPARATOR , $ key ),
26
+ explode (Constants ::ARRAY_SEPARATOR , $ key ),
28
27
(is_object ($ arrayElement )) ? self ::convertObjectToArray ($ arrayElement ) : $ arrayElement
29
28
);
30
29
}
Original file line number Diff line number Diff line change 10
10
11
11
namespace ArrayQuery \Filters ;
12
12
13
+ use ArrayQuery \Constants ;
13
14
use ArrayQuery \Filters \Criterion \FilterInterface ;
14
15
15
16
class CriterionFilter extends AbstractFilter
@@ -44,13 +45,18 @@ class CriterionFilter extends AbstractFilter
44
45
*/
45
46
public static function filter ($ criterion , $ element )
46
47
{
47
- $ value = self :: getArrayElementValueFromKey ( $ criterion ['key ' ], $ element );
48
+ $ key = explode (Constants:: ALIAS_DELIMITER , $ criterion ['key ' ]);
48
49
$ valueToCompare = $ criterion ['value ' ];
49
- $ filterClass = 'ArrayQuery \\Filters \\Criterion \\' .self ::$ operatorsMap [$ criterion ['operator ' ]];
50
+ $ operator = $ criterion ['operator ' ];
51
+ $ dateFormat = $ criterion ['date_format ' ];
52
+
53
+ $ value = self ::getArrayElementValueFromKey ($ key [0 ], $ element );
54
+
55
+ $ filterClass = 'ArrayQuery \\Filters \\Criterion \\' .self ::$ operatorsMap [$ operator ];
50
56
51
57
/** @var FilterInterface $filter */
52
58
$ filter = new $ filterClass ();
53
59
54
- return $ filter ->match ($ value , $ valueToCompare , $ criterion [ ' date_format ' ] );
60
+ return $ filter ->match ($ value , $ valueToCompare , $ dateFormat );
55
61
}
56
62
}
Original file line number Diff line number Diff line change @@ -268,6 +268,19 @@ private function applyCriteriaFilter(array $array)
268
268
return CriterionFilter::filter ($ criterion , $ element );
269
269
}
270
270
);
271
+
272
+ $ results = array_map (function ($ result ) use ($ criterion ) {
273
+ $ key = explode (Constants::ALIAS_DELIMITER , $ criterion ['key ' ]);
274
+ if (count ($ key ) > 1 ){
275
+ $ oldkey = explode (Constants::ARRAY_SEPARATOR , $ key [0 ]);
276
+ $ newkey = $ key [1 ];
277
+
278
+ $ result = (array )($ result );
279
+ $ result [$ newkey ] = $ result [$ oldkey [0 ]];
280
+ unset($ result [$ oldkey [0 ]]);
281
+ }
282
+ return $ result ;
283
+ }, $ results );
271
284
}
272
285
273
286
return $ results ;
Original file line number Diff line number Diff line change @@ -599,4 +599,22 @@ public function it_should_get_results_from_a_query_with_joins()
599
599
$ this ->assertEquals ($ results , $ expectedArray );
600
600
$ this ->assertEquals (2 , $ qb ->getCount ());
601
601
}
602
+
603
+ /**
604
+ * @test
605
+ */
606
+ public function it_should_get_results_from_a_query_with_aliases ()
607
+ {
608
+ foreach ($ this ->usersArrays as $ array ) {
609
+ $ qb = QueryBuilder::create ($ array )
610
+ ->addCriterion ('name as n ' , 'Ervin Howell ' )
611
+ ->addCriterion ('username as user ' , 'Antonette ' )
612
+ ->addCriterion ('address.street as add ' , 'Victor Plains ' );
613
+
614
+ $ this ->assertCount (1 , $ qb ->getResults ());
615
+ $ this ->assertArrayHasKey ('n ' , $ qb ->getResults ()[1 ]);
616
+ $ this ->assertArrayHasKey ('user ' , $ qb ->getResults ()[1 ]);
617
+ $ this ->assertArrayHasKey ('add ' , $ qb ->getResults ()[1 ]);
618
+ }
619
+ }
602
620
}
You can’t perform that action at this time.
0 commit comments