Робота з JSON-атрибутами за допомогою масивних кастів у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 24 грудня, 2024
Laravel пропонує функції AsArrayObject і AsCollection для ефективнішого управління складними JSON-атрибутами, що дозволяє інтуїтивно маніпулювати вкладеними структурами даних. Досліджуйте, як ці можливості трансформують управління моделями, забезпечуючи простоту та гнучкість коду!

Laravel надає касти AsArrayObject та AsCollection для ефективної роботи з комплексними JSON-атрибутами, що дозволяє інтуїтивно маніпулювати вкладеними структурами даних.

<?php

use Illuminate\Database\Eloquent\Casts\AsArrayObject;
use Illuminate\Database\Eloquent\Casts\AsCollection;

class User extends Model
{
    protected $casts = [
        'settings' => AsArrayObject::class,
        'tags' => AsCollection::class
    ];
}

Розгляньмо повний приклад моделі Product, яка використовує JSON-атрибути для управління специфікаціями та варіантами:

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
use Illuminate\Database\Eloquent\Casts\AsCollection;

class Product extends Model
{
    protected $fillable = ['name', 'specs', 'variants'];
    protected $casts = [
        'specs' => AsArrayObject::class,
        'variants' => AsCollection::class,
    ];
}

// Міграція для цієї моделі виглядатиме так:
public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->json('specs');
        $table->json('variants');
        $table->timestamps();
    });
}

// Приклад використання:
$product = Product::create([
    'name' => 'Ігровий ноутбук',
    'specs' => [
        'процесор' => 'Intel i7',
        'оперативна пам’ять' => '16GB',
        'сховище' => [
            'основне' => '512GB SSD',
            'додаткове' => '1TB HDD'
        ]
    ],
    'variants' => [
        ['color' => 'Чорний', 'price' => 999],
        ['color' => 'Сріблястий', 'price' => 1099]
    ]
]);

// Оновлюємо вкладені специфікації без жодних PHP помилок
$product->specs['сховище']['основне'] = '1TB SSD';
$product->save();
// Використовуємо методи колекцій для варіантів
$product->variants->push(['color' => 'Червоний', 'price' => 1199]);
$product->save();
// Фільтруємо варіанти за допомогою методів колекцій
$expensiveVariants = $product->variants->where('price', '>', 1000);

Ці касти забезпечують безперебійну роботу з JSON-даними, зберігаючи при цьому чистоту та легкість підтримки коду. AsArrayObject надає доступ, подібний до масиву, тоді як AsCollection відкриває можливості потужних методів колекцій Laravel

Популярні

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту