A Laravel Eloquent Builder macros for MySQL JSON functions
aidynmakhataev/eloquent-json-macros is a Laravel package for a laravel eloquent builder macros for mysql json functions.
It currently has 10 GitHub stars and 122 downloads on Packagist (latest version 1.0.0).
Install it with composer require aidynmakhataev/eloquent-json-macros.
Discover more Laravel packages by aidynmakhataev
or browse all Laravel packages to compare alternatives.
Last updated
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"}]
jsonContainsAdd 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
browserjson object column)use App\Models\Event;
Event::jsonContains('browser->os', 'Windows')->get();
Event::jsonContains('browser->resolution.x', 1920)->get();
memberjson array column)use App\Models\Event;
Event::jsonContains('members->[*].id', 6)->get();
Event::jsonContains('members->[1].info.email', '[email protected]')->get();
orJsonContainsAdd 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;
whereJsonContainsPathAdd 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
browserjson 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();
memberjson array column)Event::whereJsonContainsPath('members', '[*].info')->get();
Event::whereJsonContainsPath('members', ['[*].info', '[1].test'])->get();
orWhereJsonContainsPathAdd 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;
whereJsonDepthAdd 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
browserjson object column)Event::whereJsonDepth('browser->resolution', '>', 1)->get();
Event::whereJsonDepth('browser->os', 2)->get();
Event::whereJsonDepth('browser->resolution.x', '<=', 1)->get();
memberjson array column)Event::whereJsonDepth('members->[*].info.job', '>=', 1)->get();
Event::whereJsonDepth('members->[1].info.phones[0].fax', '>', 0)->get();
orWhereJsonDepthAdd an orWhere 'JSON_DEPTH' clause to the query for indicates depth of JSON document
Usage will be same as in whereJsonDepth macro;
whereJsonExtractAdd 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
browserjson object column)Event::whereJsonExtract('browser->resolution.x', '>', 1500)->get();
Event::whereJsonExtract('browser->name', 'Mozilla Firefox')->get();
memberjson array column)Event::whereJsonExtract('members->[0].id', '>=', 9)->get();
Event::whereJsonExtract('members->[*].info.job', 'LIKE', '%Cleaners%')->get();
orWhereJsonExtractAdd an orWhere "JSON_EXTRACT" clause to the query.
Usage will be same as in whereJsonExtract macro;
whereJsonLengthAdd 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
browserjson object column)Event::whereJsonLength('browser->resolution', '>', 1)->get();
Event::whereJsonLength('browser->os', 4)->get();
Event::whereJsonLength('browser->resolution.x', '>=', 1)->get();
memberjson array column)Event::whereJsonLength('members->[*]', '>=', 1)->get();
Event::whereJsonLength('members->[1].info.phones[*].fax', '>', 0)->get();
orWhereJsonLengthAdd 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