Методи fill та insert в Eloquent у Laravel 12.6

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 08 квітня, 2025
Оновлення Laravel до версії 12.6.0 приносить безліч нововведень, включаючи метод `fillAndInsert()` та помічник для обробки URI. Що ще цікавого ви знайдете в новій версії? Читайте далі, щоб дізнатися більше!

Команда Laravel випустила версію 12.6.0, що включає новий метод Eloquent fillAndInsert(), хелпер для сегментів URL, метод appliedRules() для Password та інші цікаві оновлення

# Дозволяє об'єднувати атрибути моделі перед вставкою

Люк Кузміш додав метод fillAndInsert(), який дозволяє “в ручному режимі кастувати значення до примітивів, встановлювати часові мітки та UUID”:

ModelWithUniqueStringIds::fillAndInsert([
    [
        'name' => 'Тейлор', 'role' => IntBackedRole::Admin, 'role_string' => StringBackedRole::Admin,
    ],
    [
        'name' => 'Нуном', 'role' => 3, 'role_string' => 'admin',
    ],
    [
        'name' => 'Дріс', 'uuid' => 'bbbb0000-0000-7000-0000-000000000000',
    ],
    [
        'name' => 'Кріс',
    ],
]);

Докладніше в Запиті на злиття #55038.

# Додати виключення HTTP-запиту

Люк Кузміш розробив метод requestException() для випадків, коли вам потрібно вручну створити виключення для HTTP-клієнта:

// До
$exception = new RequestException(
    new Response(
        Http::response(['code' => 'not_found', 404])->wait()
    )
);
 
// Після
$exception = Http::requestException(['code' => 'not_found'], 404);

Деталі дивіться в Запиті на злиття #55241.

# Хелпер-метод для сегментів URL

Честер Сайкс додав новий метод pathSegments() до класу Uri, який повертає частини шляху URI у вигляді колекції:

$uri = Uri::of('https://laravel.com/one/two/three');
 
// Вручну
$firstSegment = collect(explode('/', $uri->path()))->first(); // 'one'
 
// Використовуючи метод pathSegments()
$firstSegment = $uri->pathSegments()->first();

# Метод appliedRules для Password

@devajmeireles представив метод appliedRules() для флюїдного конструктора правил Password. Метод appliedRules() повертає масив правил валідації пароля та їх статуси використання

Гляньте на приклад коду для визначення правил пароля вашого додатку:

Password::defaults(function () {
    return Password::min(8)
        ->mixedCase()
        ->numbers();
});
 
// У вигляді
return view('livewire.profile', [
    'appliedRules' => Password::default()->appliedRules(),
]);
<div>
    <form wire:submit="save">
        <div>
            <x-input label="Password" />
 
            <span>{{ __('Пароль має містити не менше :min символів.', ['min' => $appliedRules['min']]) }}</span>
 
            @if ($appliedRules['mixedCase'] === true)
                <span>{{ __('Пароль має містити хоча б одну велику та одну маленьку літеру.') }}</span>
            @endif
 
            @if ($appliedRules['numbers'] === true)
                <span>{{ __('Пароль має містити хоча б одну цифру.') }}</span>
            @endif
        </div>
        <x-button type="submit">
            Зберегти
        </x-button>
    </form>
</div>

Деталі реалізації в Запиті на злиття #55206.

# Дозволити заборону команди db:seed

Бенедикт Франке додав можливість заборони команди SeedCommand у певних середовищах. SeedCommand не забороняється при виклику prohibitDestructiveCommands(), проте після Запиту на злиття #55238 ви можете заборонити команду db:seed таким чином:

DB::prohibitDestructiveCommands();
SeedCommand::prohibit();

# Не зупиняти процес вирізання, якщо модель не вдалася

Гюнтер Дебрауер оновив команду model:prune, щоб процес продовжувався навіть після виникнення виключення:

Коли ви виконуєте команду model:prune, і під час вирізання однієї моделі виникає виключення, вся команда завершується невдало. У мене була подібна проблема нещодавно в проєкті. Це призвело до того, що жодна модель не була вирізана, поки я не виправив помилку, що заважала вирізанню однієї моделі

Цей PR це виправляє. Команда model:prune пропускатиме моделі, які не можуть бути вирізані, та звітуватиме про виключення, що сталися під час вирізання цих моделей

Деталі в Запиті на злиття #55237.

# Нотатки про випуск

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

# v12.6.0

Популярні

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

Logomark Logotype

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

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