Recommend this page to a friend! |
Download .zip |
Info | Documentation | View files (26) | Download .zip | Reputation | Support forum (1) | Blog | Links |
Last Updated | Ratings | Unique User Downloads | Download Rankings | |||||
2022-08-08 (18 days ago) | Not yet rated by the users | Total: 43 This week: 1 | All time: 10,411 This week: 202 |
Version | License | PHP version | Categories | |||
qarray 1.0.0 | MIT/X Consortium ... | 5 | PHP 5, Searching, Data types |
Description | Author | |
This package can query hierarchic data stored as arrays. |
QArray is query engine for PHP array data. It helps to developers querying any kind of array data with ORM like feel.
composer require nahid/qarray
Since QArray is an abstract layer of code, so you have to implement your own system with a lots of pre build functionality.
Lets start our first implementation for JSON data.
class JsonQueryEngine extends \Nahid\QArray\QueryEngine
{
public function readPath($path)
{
$data = file_get_contents($path);
return json_decode($data, true);
}
public function parseData($data)
{
return json_decode($data, true);
}
}
Here you see we implement a new engine for JSON data. QueryEngine
is an abstract class, so we have to implement its two abstract function readPath
and parseData
Our implementation were complete, now we can use this implementation.
class Product
{
protected $query;
public function __construct(\Nahid\QArray\QueryEngine $query)
{
$this->query = $query;
}
public function getMacbook()
{
try {
return $this->query
->from('.')
->where('cat', 2)
->get();
} catch (\Exception $e) {
return false;
}
}
}
Here we develop a class for Products and this class use JsonQueryEngine
for fetch data from JSON file.
Lets see, how to use it.
here is our JSON file data.json
[
{"id":1, "name":"iPhone", "cat":1, "price": 80000},
{"id":2, "name":"macbook pro 2017", "cat": 2, "price": 210000},
{"id":3, "name":"Redmi 3S Prime", "cat": 1, "price": 12000},
{"id":4, "name":"Redmi 4X", "cat":1, "price": 15000},
{"id":5, "name":"macbook air", "cat": 2, "price": 110000}
]
And now we read it to querying data.
$data = new JsonQueryEngine('data.json');
$query = new SomethingBuilder($data);
dump($query->getMacbook()->toArray());
Output
array:2 [
1 => array:4 [
"id" => 2
"name" => "macbook pro 2017"
"cat" => 2
"price" => 210000
]
4 => array:4 [
"id" => 5
"name" => "macbook air"
"cat" => 2
"price" => 110000
]
]
Pretty neat, huh?
Let's explore the full API to see what else magic this library can do for you. Shall we?
List of API:
`op` -- operand to be used for matching. The following operands are available to use:
* `=` : For weak equality matching
* `eq` : Same as `=`
* `!=` : For weak not equality matching
* `neq` : Same as `!=`
* `==` : For strict equality matching
* `seq` : Same as `==`
* `!==` : For strict not equality matching
* `sneq` : Same as `!==`
>
: Check if value of givenkeyin data is Greater thanval*
* `gt` : Same as `>`
<
: Check if value of givenkeyin data is Less thanval*
* `lt` : Same as `<`
>=
: Check if value of givenkeyin data is Greater than or Equal ofval*
* `gte` : Same as `>=`
<=
: Check if value of givenkeyin data is Less than or Equal ofval*
* `lte` : Same as `<=`
null
: Check if the value of givenkeyin data isnull* (`val` parameter in `where()` can be omitted for this `op`)
notnull
: Check if the value of givenkeyin data isnot null* (`val` parameter in `where()` can be omitted for this `op`)
in
: Check if the value of givenkeyin data is exists in givenval.val* should be a plain _Array_.
notin
: Check if the value of givenkeyin data is not exists in givenval.val* should be a plain _Array_.
startswith
: Check if the value of givenkeyin data starts with (has a prefix of) the givenval*. This would only works for _String_ type data.
endswith
: Check if the value of givenkeyin data ends with (has a suffix of) the givenval*. This would only works for _String_ type data.
contains
: Check if the value of givenkeyin data has a substring of givenval*. This would only works for _String_ type data.
match
: Check if the value of givenkeyin data has a Regular Expression match with the givenval. The val
parameter should be aRegExp* for this `op`.
* `instance` : Check it the value of given `key` in data has an instance.
example:
Let's say you want to find the _'users'_ who has _id
_ of 1
. You can do it like this:
$q = new Jsonq('data.json');
$res = $q->from('users')->where('id', '=', 1)->get();
You can add multiple _where_ conditions. It'll give the result by AND-ing between these multiple where conditions.
$q = new Jsonq('data.json');
$res = $q->from('users')
->where('id', '=', 1)
->where('location', '=', 'barisal')
->get();
See a detail example here.
orWhere(key, op, val)
Parameters of orWhere()
are the same as where()
. The only difference between where()
and orWhere()
is: condition given by the orWhere()
method will OR-ed the result with other conditions.
For example, if you want to find the users with _id_ of 1
or 2
, you can do it like this:
$q = new Jsonq('data.json');
$res = $q->from('users')
->where('id', '=', 1)
->orWhere('id', '=', 2)
->get();
See detail example here.
whereIn(key, val)
This method will behave like where(key, 'in', val)
method call.
whereNotIn(key, val)
This method will behave like where(key, 'notin', val)
method call.
whereNull(key)
This method will behave like where(key, 'null')
or where(key, '=', null)
method call.
whereNotNull(key)
This method will behave like where(key, 'notnull')
or where(key, '!=', null)
method call.
whereStartsWith(key, val)
This method will behave like where(key, 'startswith', val)
method call.
whereEndsWith(key, val)
This method will behave like where(key, 'endswith', val)
method call.
whereContains(key, val)
This method will behave like where(key, 'contains', val)
method call.
whereDataType(key, val)
This method will behave like whereDataType(key, 'type', val)
method call.
sum(column)
If you encounter any bugs or issues, feel free to open an issue at github.
Also, you can shoot me an email to <mailto:nahid.dns@gmail.com> for hugs or bugs.
Files |
File | Role | Description | ||
---|---|---|---|---|
.github (1 directory) | ||||
helpers (1 file) | ||||
src (5 files, 1 directory) | ||||
tests (5 files, 1 directory) | ||||
.travis.yml | Data | Auxiliary data | ||
changelog.txt | Doc. | Documentation | ||
composer.json | Data | Auxiliary data | ||
data.json | Data | Auxiliary data | ||
LICENSE | Lic. | License text | ||
phpunit.xml.dist | Data | Auxiliary data | ||
README.md | Doc. | Documentation |
Files | / | src |
File | Role | Description | ||
---|---|---|---|---|
Exceptions (6 files) | ||||
ArrayQuery.php | Class | Class source | ||
Clause.php | Class | Class source | ||
ConditionFactory.php | Class | Class source | ||
KeyNotExists.php | Class | Class source | ||
QueryEngine.php | Class | Class source |
Files | / | src | / | Exceptions |
File | Role | Description |
---|---|---|
ConditionNotAllowedException.php | Class | Class source |
FileNotFoundException.php | Class | Class source |
InvalidJsonException.php | Class | Class source |
InvalidNodeException.php | Class | Class source |
KeyNotPresentException.php | Class | Class source |
NullValueException.php | Class | Class source |
Files | / | tests |
File | Role | Description | ||
---|---|---|---|---|
Facades (1 file) | ||||
AbstractTestCase.php | Class | Class source | ||
ConditionTest.php | Class | Class source | ||
JsonqServiceProviderTest.php | Class | Class source | ||
JsonQueriableTest.php | Class | Class source | ||
TestCase.php | Class | Class source |
Version Control | Unique User Downloads | Download Rankings | |||||||||||||||
100% |
|
|
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.