У Laravel 12.3 додано новий тип перетворення для Unicode JSON

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 березня, 2025
У новій версії Laravel 12.3.0 розробники представили цікаві можливості, зокрема новий тип касту JSON Unicode та підтримку нативних колонок JSON у схемах SQLite. Дізнайтеся більше про ці оновлення та їх переваги для вашої роботи

Команда Laravel випустила версію 12.3.0, яка включає новий тип кодування JSON Unicode, перевірку статусу збережених даних в команді about, а також нативну підтримку типів JSON і JSONB в схемах SQLite та інші вдосконалення.

# Тип кодування JSON Unicode

@fuwasegu запропонував новий тип кодування json:unicode для атрибутів Eloquent, що забезпечує кодування JSON з використанням JSON_UNESCAPED_UNICODE:

protected $casts = [
    'data' => 'json:unicode',
];

Докладний опис Pull Request #54992 пояснює, коли краще використовувати цей тип, ніж звичайний json:

Цей [тип] полегшує збереження та отримання JSON-даних без Unicode Escape (\uXXXX), що особливо корисно для застосунків, які обробляють неASCII символи, такі як японські, китайські або емодзі.

Зараз тип json в Eloquent за замовчуванням кодує символи Unicode, що ускладнює читання JSON-атрибутів та потребує ручного декодування. Розробники часто обходять це, переозначаючи accessor/mutator або використовуючи json_encode() вручну...

# Додано перевірку "Storage Linked" до команди about

Adam Patterson додав новий розділ до команди artisan about, що показує статус посилань на файлові системи. Наприклад, в конфігураційному файлі filesystem.php, де вказані посилання:

// config/filesystem.php
return [
    'links' => [
        public_path('storage') => storage_path('app/public'),
        public_path('images') => storage_path('app/images'),
    ],
];

Команда artisan about тепер відображає статус цих посилань:

$ php artisan about
 
Storage
public/images ................................................... NOT LINKED
public/storage .................................................. LINKED

# Нативні типи JSON і JSONB у схемі SQLite

@fuwasegu також додав підтримку типів JSON і JSONB в схемах SQLite:

SQLite підтримує тип даних JSON як вбудовану функцію з версії 3.38.0, але до цього користувачам потрібно було встановлювати розширення. Нативна підтримка типу JSONB з'явилася з версії 3.45.

Оскільки Laravel 12 підтримує SQLite версії 3.26.0 і вище, не слід вважати, що підтримка JSON/JSONB завжди доступна. Хоча Query\Grammars\SQLiteGrammar включає підтримку функцій JSON, Schema\Grammars\SQLiteGrammar не пропонує цю опцію. Цей Pull Request дозволяє встановлювати конфігурацію з налаштування бази даних для використання нативних JSON-колонок при визначенні схеми.

Ось варіанти конфігурації:

'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DATABASE_URL'),
    ...,
    'use_native_json' => true,
    'use_native_jsonb' => true,
],

Цей Pull Request не змінює значення за замовчуванням, але якщо хочете використовувати нативні JSON або JSONB колонки, ви можете активувати ці опції у вашому з'єднанні. Деталі реалізації можна знайти у Pull Request #54991.

# Підтримка "унікальних нулів не є різними" у PostgreSQL

Thierry Parent додав підтримку "унікальних нулів не є різними" для PostgreSQL (>= 15) під час створення унікальних індексів:

Відтепер доступний новий метод для визначення індексу nullsNotDistinct() (додаткові приклади можна знайти в юніт-тестах) при використанні драйвера бази даних postgres (точніше, при використанні граматики схеми Postgres).

# Примітки до випуску

Повний список нових функцій та оновлень можна переглянути нижче, а також порівняти зміни між 12.2.0 та 12.3.0 на GitHub. Наступні примітки до випуску безпосередньо з журналу змін:

# v12.3.0