dimalebid / laravel-json-cast
description
1.0.2
2022-04-29 16:19 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
This package is auto-updated.
Last update: 2025-03-01 00:37:45 UTC
README
Вы когда-нибудь хотели привести свои столбцы JSON к объекту-значению?
Под капотом он реализует интерфейс Laravel Arrayable, которое обрабатывает сериализацию между JsonCastable и столбцом базы данных JSON.
Installation
You can install the package via composer:
$ composer require dimalebid/laravel-json-cast
Usage
1. Создаете UserSettings
namespace App\Models\User; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use App\Models\User\Settings\Settings; class UserSettings implements CastsAttributes { public function get($model, string $key, $value, array $attributes) { return new Settings((array)json_decode($value, true)); } public function set($model, string $key, $value, array $attributes) { return json_encode(get_object_vars($value)); } }
2. Создаете Settings
namespace App\Models\User\Settings; use DimaLebid\LaravelJsonCast\JsonCastable; use App\Models\User\Settings\Auth; class Settings extends JsonCastable { public Auth $auth; public string $country = 'Ukraine'; public ?string $phone; public function __construct(array $attributes) { $this->auth = new Auth($attributes); parent::__construct($attributes); } }
Обьект Auth
похож на Settings
с одним отличием что в нем нет конструктора.
3. Настройте свой атрибут Eloquent для приведения к нему:
namespace App\Models; use App\Values\Address; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $casts = [ 'settings' => UserSettings::class, ]; }
Получить значение из поля JSON
$userId = 1; $user = User::find($userId); $settings = $user->settings; dd($settings->country); //or dd($settings->auth->facebook);
Сохранить или обновить значение в поле JSON
$userId = 1; $user = User::find($userId); $user->settings->country = 'USA'; $user->save();
Вот так легко и просто можно работать с полем JSON.