In Laravel 12, updating records in the database can be achieved using both the Eloquent ORM and the Query Builder. Here's how you can perform update operations using each method:
1. Using Eloquent ORM
Eloquent provides a fluent and expressive interface for interacting with your database tables.
Updating a Record by ID:
<?php
use App\Models\User;
// Retrieve the user by their primary key (ID)
$user = User::find($id);
// Update attributes
$user->name = 'New Name';
$user->email = 'newemail@example.com';
// Save the changes to the database
$user->save();
?>
Updating Records Based on a Condition:
<?php
use App\Models\User;
// Update all users with the role 'subscriber' to 'member'
User::where('role', 'subscriber')->update(['role' => 'member']);
?>
Using `updateOrCreate` Method:-
The `updateOrCreate` method attempts to find a record matching the given attributes and updates it; if no matching record is found, it creates a new one.
<?php
use App\Models\User;
// Update the user's name if the email exists; otherwise, create a new user
User::updateOrCreate(
['email' => 'johndoe@example.com'],
['name' => 'John Doe', 'role' => 'member']
);
?>
In this example, Laravel searches for a user with the specified email. If found, it updates the name and role; otherwise, it creates a new user with these attributes.
2. Using Query Builder
Laravel's Query Builder offers a more direct approach to constructing and executing database queries.
Updating Records Based on a Condition:
<?php
use Illuminate\Support\Facades\DB;
// Update users with 'inactive' status to 'active'
DB::table('users')
->where('status', 'inactive')
->update(['status' => 'active']);
?>
Updating Multiple Columns:
<?php
use Illuminate\Support\Facades\DB;
// Update multiple columns for users in a specific department
DB::table('users')
->where('department', 'sales')
->update([
'status' => 'active',
'role' => 'manager'
]);
?>
Incrementing or Decrementing a Column's Value:
You can increment or decrement a column's value using the `increment` and `decrement` methods.
<?php
use Illuminate\Support\Facades\DB;
// Increment the 'login_count' by 1 for a specific user
DB::table('users')
->where('id', $id)
->increment('login_count');
// Decrement the 'credits' by 5 for a specific user
DB::table('users')
->where('id', $id)
->decrement('credits', 5);
?>