Downloads
Stars
Version
This package helps you to use MySQL JSON functions in Eloquent style and as helper functions.
You can install the package using composer
$ composer require aidynmakhataev/eloquent-json-macros
Support macros:
Available helpers:
Let's say we have a table events
with json columns - browser
and members
;
{"os": "Windows", "name": "Safari", "resolution": {"x": 1920, "y": 1080}}
[{"id": 6, "info": {"job": "Electrolytic Plating Machine Operator", "email": "[email protected]", "card_type": "Visa"}, "name": "Prof. Eldridge Legros"}, {"id": 8, "info": {"job": "Urban Planner", "email": "[email protected]", "card_type": "Master Card"}, "name": "Ms. Alayna Ziemann DDS"}]
jsonContains
Add where 'JSON_CONTAINS' clause to the query for indicates whether JSON document contains specific object at path
More on: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains
browser
json object column)use App\Models\Event;
Event::jsonContains('browser->os', 'Windows')->get();
Event::jsonContains('browser->resolution.x', 1920)->get();
member
json array column)use App\Models\Event;
Event::jsonContains('members->[*].id', 6)->get();
Event::jsonContains('members->[1].info.email', '[email protected]')->get();
orJsonContains
Add an orWhere 'JSON_CONTAINS' clause to the query for indicates whether JSON document contains specific object at path
Usage will be same as in jsonContains
macro;
whereJsonContainsPath
Add a where 'JSON_CONTAINS_PATH' clause to the query for indicates whether JSON document contains any data at path
More on: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-contains-path
browser
json object column)For single path
Event::whereJsonContainsPath('browser', 'resolution')->get();
For multiple path
Event::whereJsonContainsPath('browser', ['resolution', 'os'])->get();
You can also optionally pass a third parameter ('one' or 'all'), by default used 'one'
Event::whereJsonContainsPath('browser', ['resolution', 'test'], 'all')->get();
member
json array column)Event::whereJsonContainsPath('members', '[*].info')->get();
Event::whereJsonContainsPath('members', ['[*].info', '[1].test'])->get();
orWhereJsonContainsPath
Add an orWhere 'JSON_CONTAINS_PATH' clause to the query for indicates whether JSON document contains any data at path
Usage will be same as in whereJsonContainsPath
macro;
whereJsonDepth
Add a where 'JSON_DEPTH' clause to the query for indicates depth of JSON document
More on: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-depth
browser
json object column)Event::whereJsonDepth('browser->resolution', '>', 1)->get();
Event::whereJsonDepth('browser->os', 2)->get();
Event::whereJsonDepth('browser->resolution.x', '<=', 1)->get();
member
json array column)Event::whereJsonDepth('members->[*].info.job', '>=', 1)->get();
Event::whereJsonDepth('members->[1].info.phones[0].fax', '>', 0)->get();
orWhereJsonDepth
Add an orWhere 'JSON_DEPTH' clause to the query for indicates depth of JSON document
Usage will be same as in whereJsonDepth
macro;
whereJsonExtract
Add a where "JSON_EXTRACT" clause to the query.
More on: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract
browser
json object column)Event::whereJsonExtract('browser->resolution.x', '>', 1500)->get();
Event::whereJsonExtract('browser->name', 'Mozilla Firefox')->get();
member
json array column)Event::whereJsonExtract('members->[0].id', '>=', 9)->get();
Event::whereJsonExtract('members->[*].info.job', 'LIKE', '%Cleaners%')->get();
orWhereJsonExtract
Add an orWhere "JSON_EXTRACT" clause to the query.
Usage will be same as in whereJsonExtract
macro;
whereJsonLength
Add a where 'JSON_LENGTH' clause to the query.
More on: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-length
browser
json object column)Event::whereJsonLength('browser->resolution', '>', 1)->get();
Event::whereJsonLength('browser->os', 4)->get();
Event::whereJsonLength('browser->resolution.x', '>=', 1)->get();
member
json array column)Event::whereJsonLength('members->[*]', '>=', 1)->get();
Event::whereJsonLength('members->[1].info.phones[*].fax', '>', 0)->get();
orWhereJsonLength
Add an orWhere 'JSON_LENGTH' clause to the query
Usage will be same as in whereJsonLength
macro;
git checkout -b feature/fooBar
)git commit -am 'Add some fooBar'
)git push origin feature/fooBar
)If you discover any security related issues, please email [email protected] instead of using the issue tracker.
MIT