Оптимізуйте масштабні вставки за допомогою методу fillAndInsert() у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 03 травня, 2025
В Laravel з'явилася нова функція fillAndInsert(), яка вирішує важливу проблему під час масових операцій з Eloquent. Чи готові ви дізнатися, як ця методика підвищує продуктивність без втрати можливостей Eloquent? Читайте статтю, щоб розкрити всі переваги нововведення

Метод fillAndInsert() у Laravel вирішує поширену проблему в масштабних операціях Eloquent. Ця функція забезпечує кастинг на рівні моделі та підготовку атрибутів під час масового вставлення, усуваючи традиційний компроміс між продуктивністю та функціональністю

Розробники, які працюють із масовим вставленням, зазвичай стоятимуть перед вибором: використати insert() для швидкості, але втратити потужні можливості Eloquent, або створити окремі моделі для повної функціональності, але знизити продуктивність. Метод fillAndInsert() об'єднує обидва ці переваги, застосовуючи правильний кастинг, таймстампи та підготовку атрибутів, зберігаючи ефективність масового вставлення:

User::fillAndInsert([
    [
        'name' => 'Taylor',
        'email' => 'taylor@example.com',
        'role' => UserRole::Admin,
    ],
    [
        'name' => 'Nuno',
        'email' => 'nuno@example.com',
        'role' => 3, // Буде приведено до enum
    ],
]);

Цей метод особливо корисний для моделей, що використовують можливості кастингу Eloquent:

class Invoice extends Model
{
    protected $fillable = [
        'number', 'amount', 'status', 'client_id', 'metadata'
    ];
 
    protected function casts(): array
    {
        return [
            'amount' => 'decimal:2',
            'status' => InvoiceStatus::class,
            'metadata' => 'array',
            'id' => 'string',
        ];
    }
 
    public static function boot()
    {
        parent::boot();
 
        static::creating(function ($model) {
            if (empty($model->id)) {
                $model->id = Str::uuid();
            }
        });
    }
}
 
// Масове вставлення з правильним кастингом та генерацією UUID
Invoice::fillAndInsert([
    [
        'number' => 'INV-2023-001',
        'amount' => '1450.75',
        'status' => InvoiceStatus::Paid,
        'metadata' => ['payment_method' => 'credit_card', 'ref' => 'TX12345'],
    ],
    [
        'number' => 'INV-2023-002',
        'amount' => '299.99',
        'status' => 'pending', // Рядок буде приведено до enum
        'metadata' => json_encode(['payment_method' => 'bank_transfer', 'ref' => 'BT54321']), // Рядок буде приведено до масиву
    ],
    [
        'number' => 'INV-2023-003',
        'amount' => 750,
        'status' => 0, // Ціле число буде приведено до enum
        'metadata' => ['payment_method' => 'paypal', 'ref' => 'PP98765'],
    ],
]);

Метод fillAndInsert() дозволяє розробникам підтримувати чисті й узгоджені шаблони коду, скориставшись як передовими можливостями кастингу Eloquent, так і перевагами продуктивності масових операцій. Це додавання є значним поліпшенням у роботі для розробників Laravel, які працюють з великими наборами даних.

Популярні

Logomark Logotype

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку