Метод 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, які працюють з великими наборами даних.
Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!
Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті
Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку