PHPackages                             darkeum/darklyy-json-attributes - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. darkeum/darklyy-json-attributes

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

darkeum/darklyy-json-attributes
===============================

Добавляет JSON атрибуты в модели Darklyy.

v1.0.2(3y ago)066MITPHPPHP ^8.0

Since Jun 2Pushed 3y ago1 watchersCompare

[ Source](https://github.com/darkeum/darklyy-json-attributes)[ Packagist](https://packagist.org/packages/darkeum/darklyy-json-attributes)[ Docs](https://github.com/darkeum/darklyy-json-attributes)[ RSS](/packages/darkeum-darklyy-json-attributes/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (3)Dependencies (9)Versions (4)Used By (0)

Добавляет JSON атрибуты в модели Darklyy.
=========================================

[](#добавляет-json-атрибуты-в-модели-darklyy)

[![Latest Version on Packagist](https://camo.githubusercontent.com/fbb3be98412280344e2258092118121e3f33ccf5f4c02591839705f2bd9ed0c0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6461726b65756d2f6461726b6c79792d6a736f6e2d617474726962757465732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages//darkeum/darklyy-json-attributes)[![Total Downloads](https://camo.githubusercontent.com/1f68a9d751a92a59de78a61a73fc800b85732e92bfa16ee19d82f753332bfd0d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6461726b65756d2f6461726b6c79792d6a736f6e2d617474726962757465732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/darkeum/darklyy-json-attributes)

Было бы здорово, если бы в Darklyy была возможность использовать дух NoSQL. Этот пакет делает именно это. Он предоставляет трейт, который при применении к модели позволяет хранить произвольные значения в одном столбце JSON.

Вот несколько примеров. Здесь мы используем столбец `extra_attributes`, но вы можете назвать его как хотите

```
// получение значений
$yourModel->extra_attributes->name = 'value';
$yourModel->extra_attributes->name; // returns 'value'

// вы также можете использовать массив
$yourModel->extra_attributes['name'] = 'value';
$yourModel->extra_attributes['name'] // returns 'value'

// установка нескольких значений за раз
$yourModel->extra_attributes = [
   'rey' => ['side' => 'light'],
   'snoke' => ['side' => 'dark']
];

// добавление/обновление нескольких значений за один раз через set()установка/обновление нескольких значений за один раз через set()
$yourModel->extra_attributes->set([
   'han' => ['side' => 'light'],
   'snoke' => ['side' => 'dark']
]);

// получение значений с использованием записи через точкуполучение значений с использованием записи через точку
$yourModel->extra_attributes->get('rey.side'); // returns 'light'

// получить значение по умолчанию, когда атрибут не существует
$yourModel->extra_attributes->get('non_existing', 'default'); // returns 'default'

// если у модели есть modelScope то вы можете получить все занчения с заданными JSON атрибутами.
$yourModel->withSchemalessAttributes(['name' => 'value', 'name2' => 'value2'])->get();

// удалить ключ и значение
$yourModel->extra_attributes->forget('key');
```

Требования
----------

[](#требования)

Для этого пакета требуется база данных с поддержкой столбцов `json`, например MySQL 5.7 или выше.

Установка
---------

[](#установка)

Вы можете установить пакет через composer:

```
composer require darkeum/darklyy-json-attributes
```

JSON атрибуты будут храниться в столбце json в таблице вашей модели. Давайте добавим этот столбец и подготовим модель.

### Добавление столбца, в котором будут храниться JSON атрибуты

[](#добавление-столбца-в-котором-будут-храниться-json-атрибуты)

Добавьте миграцию для всех моделей, в которые вы хотите добавить JSON атрибуты. Вы должны использовать метод `jsonAttributes` в `Blueprint`, чтобы добавить столбец. Аргумент, который вы даете `jsonAttributes`, — это имя добавляемого столбца. Вы можете использовать любое имя, какое захотите. Вы также можете добавить в таблицу столько столбцов атрибутов без схемы, сколько захотите. Во всех примерах этого файла сведений мы будем использовать один столбец с именем `extra_attributes`.

```
Schema::table('your_models', function (Blueprint $table) {
    $table->jsonAttributes('extra_attributes');
});
```

### Подготовка модели

[](#подготовка-модели)

Чтобы работать с JSON атрибутами, вам нужно добавить к своей модели собственное приведение и область видимости. Вот пример того, что вам нужно добавить, если вы выбрали `extra_attributes` в качестве имени столбца.

```
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Darkeum\JsonAttributes\Casts\JsonAttributes;

class TestModel extends Model
{
    // ...

    public $casts = [
        'extra_attributes' => JsonAttributes::class,
    ];

    public function scopeWithExtraAttributes(): Builder
    {
        return $this->extra_attributes->modelScope();
    }

    // ...
}
```

Если вам нужна поддержка нескольких столбцов без схемы в одной модели, вы должны использовать трейт `JsonAttributesTrait`. Вот пример того, что вам нужно добавить, если вы выбрали `extra_attributes, other_extra_attributes` в качестве имен столбцов.

```
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Darkeum\JsonAttributes\JsonAttributes;
use Darkeum\JsonAttributes\JsonAttributesTrait;

class TestModel extends Model
{
    use JsonAttributesTrait;

    // ...

    /**
     * @var array
     */
    protected $jsonAttributes = [
        'extra_attributes',
        'other_extra_attributes',
    ];

    public function scopeWithExtraAttributes(): Builder
    {
        return $this->extra_attributes->modelScope();
    }

    public function scopeWithOtherExtraAttributes(): Builder
    {
        return $this->other_extra_attributes->modelScope();
    }

    // ...
}
```

Если вы хотите повторно использовать это поведение в нескольких моделях, вы можете поместить функцию в свой собственный трейт. Вот как может выглядеть эта трейт:

```
namespace App\Models\Concerns;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Darkeum\JsonAttributes\Casts\JsonAttributes;

trait HasJsonAttributes
{
    public function initializeHasJsonAttributes()
    {
        $this->casts['extra_attributes'] = JsonAttributes::class;
    }

    public function scopeWithExtraAttributes(): Builder
    {
        return $this->extra_attributes->modelScope();
    }
}
```

Использование
-------------

[](#использование)

### Получение и установка JSON атрибутов

[](#получение-и-установка-json-атрибутов)

Это самый простой способ получить и установить JSON атрибуты:

```
$yourModel->extra_attributes->name = 'value';

$yourModel->extra_attributes->name; // Returns 'value'
```

В качестве альтернативы вы можете использовать массив:

```
$yourModel->extra_attributes['name'] = 'value';

$yourModel->extra_attributes['name']; // Returns 'value'
```

Вы можете заменить все существующие JSON атрибуты без схемы, назначив им необходимый массив.

```
// Все существующие JSON атрибуты будут заменены
$yourModel->extra_attributes = ['name' => 'value'];
$yourModel->extra_attributes->all(); // Returns ['name' => 'value']
```

Вы также можете использовать `get` и `set`. Методы имеют поддержку записи через точку.

```
$yourModel->extra_attributes = [
   'rey' => ['side' => 'light'],
   'snoke' => ['side' => 'dark'],
];
$yourModel->extra_attributes->set('rey.side', 'dark');

$yourModel->extra_attributes->get('rey.side'); // Returns 'dark
```

Вы также можете передать значение по умолчанию методу `get`.

```
$yourModel->extra_attributes->get('non_existing', 'default'); // Returns 'default'
```

### Сохранение JSON атрибутов

[](#сохранение-json-атрибутов)

Чтобы сохранить JSON атрибуты, вы должны, как и для обычных атрибутов, вызвать `save()` в модели.

```
$yourModel->save(); // Сохраняет как обычные, так и JSON атрибуты
```

### Получение моделей с определенными JSON атрибутами

[](#получение-моделей-с-определенными-json-атрибутами)

Вот как вы можете использовать предоставленный объект modelScope.

```
// Возвращает все модели, которые имеют все заданные JSON атрибуты.
$yourModel->withExtraAttributes(['name' => 'value', 'name2' => 'value2'])->get();
```

Если вы хотите выполнять поиск только по одному JSON атрибуту, вы можете использовать modelScope следующим образом.

```
// возвращает все модели, у которых для JSON атрибута `name` установлено значение `value`
$yourModel->withExtraAttributes('name', 'value')->get();
```

Кроме того, если вы хотите выполнять поиск только по одному JSON атрибуту с помощью пользовательского оператора, вы можете использовать modelScope следующим образом.

```
// возвращает все модели, у которых есть JSON атрибут `name`, начинающийся со `value`
$yourModel->withExtraAttributes('name', 'LIKE', 'value%')->get();
```

Если вы хотите выполнять поиск только по вложенному JSON атрибуту, вы можете использовать modelScope следующим образом.

```
// возвращает все модели, у которых для вложенного JSON атрибута han.side установлено значение `light`
$yourModel->withExtraAttributes('han->side', 'light')->get();
```

Тестирование
------------

[](#тестирование)

Сначала создайте базу данных MySQL с именем `darklyy_json_attributes`. После этого вы можете запустить тесты с помощью:

```
composer test
```

Лицензия
--------

[](#лицензия)

The MIT License (MIT). Смотрите [License File](LICENSE.md) для получения дополнительной информации.

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~44 days

Total

3

Last Release

1351d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/17780258?v=4)[Komarov Ivan](/maintainers/Darkeum)[@darkeum](https://github.com/darkeum)

---

Top Contributors

[![darkeum](https://avatars.githubusercontent.com/u/17780258?v=4)](https://github.com/darkeum "darkeum (5 commits)")

---

Tags

darkeumdarklyydarklyy-json-attributes

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/darkeum-darklyy-json-attributes/health.svg)

```
[![Health](https://phpackages.com/badges/darkeum-darklyy-json-attributes/health.svg)](https://phpackages.com/packages/darkeum-darklyy-json-attributes)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[spatie/laravel-enum

Laravel Enum support

3655.4M31](/packages/spatie-laravel-enum)[psalm/plugin-laravel

Psalm plugin for Laravel

3274.9M308](/packages/psalm-plugin-laravel)[illuminate/pipeline

The Illuminate Pipeline package.

9446.6M213](/packages/illuminate-pipeline)[illuminate/pagination

The Illuminate Pagination package.

10532.5M862](/packages/illuminate-pagination)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
