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

Перекладено ШІ
Оригінал: 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