Skip to content

Commit 1c3dae5

Browse files
author
Mauro Cassani
committed
alias feature
1 parent 87df9bc commit 1c3dae5

File tree

6 files changed

+81
-6
lines changed

6 files changed

+81
-6
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,28 @@ foreach ($qb->getResults() as $element){
199199
}
200200
```
201201

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+
202224
## More examples
203225

204226
Please refer to [QueryBuilderTest](https://github.com/mauretto78/array-query/blob/master/tests/QueryBuilderTest.php) for more examples.

src/Constants.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
}

src/Filters/AbstractFilter.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@
1010

1111
namespace ArrayQuery\Filters;
1212

13+
use ArrayQuery\Constants;
1314
use ArrayQuery\Exceptions\NotValidKeyElementInArrayException;
1415

1516
abstract class AbstractFilter
1617
{
17-
const ARRAY_SEPARATOR = '.';
18-
1918
/**
2019
* @param $key
2120
* @param $arrayElement
@@ -24,7 +23,7 @@ abstract class AbstractFilter
2423
protected static function getArrayElementValueFromKey($key, $arrayElement)
2524
{
2625
return self::getValueFromKeysArray(
27-
explode(self::ARRAY_SEPARATOR, $key),
26+
explode(Constants::ARRAY_SEPARATOR, $key),
2827
(is_object($arrayElement)) ? self::convertObjectToArray($arrayElement) : $arrayElement
2928
);
3029
}

src/Filters/CriterionFilter.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
namespace ArrayQuery\Filters;
1212

13+
use ArrayQuery\Constants;
1314
use ArrayQuery\Filters\Criterion\FilterInterface;
1415

1516
class CriterionFilter extends AbstractFilter
@@ -44,13 +45,18 @@ class CriterionFilter extends AbstractFilter
4445
*/
4546
public static function filter($criterion, $element)
4647
{
47-
$value = self::getArrayElementValueFromKey($criterion['key'], $element);
48+
$key = explode(Constants::ALIAS_DELIMITER, $criterion['key']);
4849
$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];
5056

5157
/** @var FilterInterface $filter */
5258
$filter = new $filterClass();
5359

54-
return $filter->match($value, $valueToCompare, $criterion['date_format']);
60+
return $filter->match($value, $valueToCompare, $dateFormat);
5561
}
5662
}

src/QueryBuilder.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,19 @@ private function applyCriteriaFilter(array $array)
268268
return CriterionFilter::filter($criterion, $element);
269269
}
270270
);
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);
271284
}
272285

273286
return $results;

tests/QueryBuilderTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,4 +599,22 @@ public function it_should_get_results_from_a_query_with_joins()
599599
$this->assertEquals($results, $expectedArray);
600600
$this->assertEquals(2, $qb->getCount());
601601
}
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+
}
602620
}

0 commit comments

Comments
 (0)