sukohi / eloquent-array
A Laravel package to deal with array values that we can search through where clause.
Installs: 31
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/sukohi/eloquent-array
Requires
- laravel/framework: ~5.2
README
A Laravel package to deal with array values that we can search through where clause.
This package is only for Laravel 5.3+.
Installation
Execute the following command.
composer require sukohi/eloquent-array:6.*
then set EloquentArrayServiceProvider in your config/app.php.
Sukohi\EloquentArray\EloquentArrayServiceProvider::class, 
Preparation
Execute the following command to publish and migrate the migration.
php artisan vendor:publish --provider="Sukohi\EloquentArray\EloquentArrayServiceProvider"
php artisan migrate
Then set EloquentArrayTrait in your model like so.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Sukohi\EloquentArray\EloquentArrayTrait;
class Item extends Model
{
    use EloquentArrayTrait;
}
Usage
Set
$item = \App\Item::find(1);
$item->setArray('locales', [
    'en' => 'English',
    'es' => 'Spanish',
    'ja' => 'Japanese'
]);
$item->saveArray();
Unset
$item->unsetArray('locales'); // Remove `locales`
$item->saveArray();
// Or
$item->unsetArray('locales', 'en'); // Remove `en`
$item->saveArray();
Delete
A specific array values related to an item will be removed.
\App\Item::find(1)->deleteArray('locales');
Clear
All of the array values related to an item will be removed.
\App\Item::find(1)->clearArray();
Retrieve
with Key
$item = \App\Item::find(1);
$array = $item->getArray('locales');
/* 
    Array
    (
        [en] => English
        [es] => Spanish
        [ja] => Japanese
    )
*/
without Key
$array = $item->getArray('locales', false);
/* 
    Array
    (
        [0] => English
        [1] => Spanish
        [2] => Japanese
    )
*/
All values
$array = $item->getAllArray();
A Specific Value
echo $item->getArrayValue('locales', 'en'); // English
// with Default Value
echo $item->getArrayValue('locales', 'en', 'Default-Value');
Where Clause
You can use whereArray() method to filter your data like so.
$items = \App\Item::whereArray('locales', 'en')->get();
// or
$items = \App\Item::where('id', 1)
    ->orWhereArray('locales', 'en')
    ->get();
Order by Clause
You can use array items name for ORDER BY like so.
$items = \App\Item::orderByArray('names', 'en')->get();         // asc
$items = \App\Item::orderByArray('names', 'en', 'asc')->get();
// or
$items = \App\Item::orderByArray('names', 'en', 'desc')->get();
Model
[Set]
$item->setModelArray('App\User', 1);   // Model ID
$item->saveArray();
[Set Array]
$item->setAllModelArray([
    'App\User' => [1, 2, 3, 4, 5]   // Model IDs
]);
$item->saveArray();
[Unset]
$item->unsetModelArray([
    'App\User' => [2, 3]   // Model IDs
]);
$item->saveArray();
[Clear]
$item->clearModelArray('App\User');
$item->saveArray();
// or
$item->clearModelArray([
    'App\User',
    'App\Item'
]);
$item->saveArray();
[Retrieve]
$users = $item->getModelArray('App\User');
License
This package is licensed under the MIT License.
Copyright 2016 Sukohi Kuhoh