In Laravel, working with the database is made extremely elegant and powerful through Eloquent ORM, the Query Builder, and even raw SQL when needed. This guide covers everything you need to know about Laravel database queries to handle real-world application logic efficiently.
🧠 What Are Laravel Database Queries?
Laravel provides three main ways to interact with databases:
- Raw SQL – Direct SQL statements
- Query Builder – Fluent interface to build database queries
- Eloquent ORM – Laravel’s object-relational mapper
Each has its use case depending on the complexity, performance, and readability requirements.
🔹 1. Using Raw SQL in Laravel
Laravel allows raw queries using the DB facade:
use Illuminate\Support\Facades\DB;
$users = DB::select(‘SELECT * FROM users WHERE active = ?’, [1]);
You can also use:
DB::insert();
DB::update();
DB::delete();
DB::statement();
⚠️ Use raw queries carefully to avoid SQL injection.
🔹 2. Laravel Query Builder
The Query Builder offers a fluent interface to construct queries without writing SQL directly.
📋 Basic Select
$users = DB::table(‘users’)->where(‘status’, ‘active’)->get();
🔄 Insert
DB::table(‘users’)->insert([
‘name’ => ‘John Doe’,
’email’ => ‘john@example.com’
]);
✏️ Update
DB::table(‘users’)->where(‘id’, 1)->update([‘name’ => ‘Jane’]);
❌ Delete
DB::table(‘users’)->where(‘id’, 1)->delete();
🔎 Advanced Query Builder Techniques
- where with multiple conditions
$users = DB::table(‘users’)
->where(‘status’, ‘active’)
->where(‘role’, ‘admin’)
->get();
- orWhere, whereIn, whereBetween
DB::table(‘orders’)->whereBetween(‘amount’, [100, 500])->get();
DB::table(‘orders’)->whereIn(‘status’, [‘pending’, ‘processing’])->get();
- Joins
DB::table(‘posts’)
->join(‘users’, ‘posts.user_id’, ‘=’, ‘users.id’)
->select(‘posts.*’, ‘users.name’)
->get();
- Aggregates
$total = DB::table(‘orders’)->sum(‘amount’);
$count = DB::table(‘orders’)->count();
🔹 3. Laravel Eloquent ORM
Eloquent is Laravel’s elegant ORM layer. It provides Active Record implementation for interacting with the database.
🧱 Basic Usage
$users = User::where(‘status’, ‘active’)->get();
➕ Create
User::create([
‘name’ => ‘Alex’,
’email’ => ‘alex@example.com’,
]);
✏️ Update
$user = User::find(1);
$user->name = ‘Updated Name’;
$user->save();
❌ Delete
User::destroy(1);
🔗 Eloquent Relationships
hasOne, hasMany
belongsTo, belongsToMany
with(), load() for eager loading
Example:
$posts = Post::with(‘comments’)->get();
🚀 Performance Tips for Laravel Queries
Use eager loading to prevent N+1 issues
→ Post::with(‘comments’)->get();
Avoid unnecessary queries using exists() or pluck()
Use caching (remember, Cache::put(), etc.)
Use indexes in your database where appropriate
Use pagination instead of loading huge data sets:
$users = User::paginate(10);
✅ Best Practices for Laravel Database Queries
Always validate user input before querying
Avoid raw queries unless necessary
Prefer Eloquent for readability, Query Builder for flexibility
Use transactions for critical operations:
DB::transaction(function () {
// operations
});
Log slow queries for performance audit:
DB::listen(function ($query) {
logger($query->sql);
});
https://laravel.com/docs/12.x/queries
Laravel Blade – Complete Guide with If Conditions, Loops, and Variables (Chapter 8)
