sukohi/eloquent-array

A Laravel package to deal with array values that we can search through where clause.

6.0.0 2017-01-31 08:39 UTC

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