Database And Eloquent ORM



🚀 Database and Eloquent ORM in Laravel

Laravel provides a powerful database layer with two main features:

  1. Query Builder – Fluent, chainable syntax for building SQL queries.

  2. Eloquent ORM (Object Relational Mapper) – Active Record implementation for interacting with database tables as models.

Eloquent makes database interaction simple, readable, and expressive, reducing the need to write raw SQL queries.


🔹 1. Database Configuration

Database settings are stored in .env file:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=root
DB_PASSWORD=

➡️ Laravel supports MySQL, PostgreSQL, SQLite, SQL Server.


🔹 2. Running Database Migrations

Migrations = version control for databases.

Create migration:

php artisan make:migration create_users_table

Example migration:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamps();
    });
}

Run migrations:

php artisan migrate

🔹 3. Eloquent ORM Basics

Each table has a Model.

📂 Example: app/Models/User.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email'];
}

➡️ Table name → users (plural form by convention).
➡️ Primary key → id by default.


🔹 4. Eloquent CRUD Examples

✅ Insert Data

$user = new User;
$user->name = 'Amit';
$user->email = 'amit@example.com';
$user->save();

Or Mass Assignment:

User::create([
    'name' => 'Rahul',
    'email' => 'rahul@example.com'
]);

✅ Retrieve Data

$users = User::all();   // Get all users
$user = User::find(1);  // Find by ID
$user = User::where('email', 'amit@example.com')->first();

✅ Update Data

$user = User::find(1);
$user->name = 'Amit Kumar';
$user->save();

Or:

User::where('id', 1)->update(['name' => 'Updated Name']);

✅ Delete Data

$user = User::find(1);
$user->delete();

Or:

User::destroy(1);

🔹 5. Query Builder Examples

$users = DB::table('users')->where('status', 'active')->get();

$userCount = DB::table('users')->count();

DB::table('users')->insert(['name' => 'Sita', 'email' => 'sita@example.com']);

🔹 6. Relationships in Eloquent

Eloquent makes it easy to define table relationships.

✅ One to One

class User extends Model {
    public function phone() {
        return $this->hasOne(Phone::class);
    }
}

✅ One to Many

class Post extends Model {
    public function comments() {
        return $this->hasMany(Comment::class);
    }
}

✅ Many to Many

class Student extends Model {
    public function courses() {
        return $this->belongsToMany(Course::class);
    }
}

🔹 7. Eloquent Accessors & Mutators

  • Accessor → format data when retrieving.

  • Mutator → modify data before saving.

class User extends Model {
    public function getNameAttribute($value) {
        return ucfirst($value);
    }

    public function setEmailAttribute($value) {
        $this->attributes['email'] = strtolower($value);
    }
}

🔹 8. Eloquent Scopes

Reusable query logic.

class User extends Model {
    public function scopeActive($query) {
        return $query->where('status', 'active');
    }
}

Usage:

$users = User::active()->get();

📌 Summary

  • Migrations → database version control.

  • Eloquent ORM → model-based data interaction.

  • CRUD operations → simple and expressive.

  • Relationships → one-to-one, one-to-many, many-to-many.

  • Accessors, Mutators, and Scopes → powerful customization.

Laravel’s Eloquent makes database handling easier, faster, and cleaner.