Laravel 8 Database & Eloquent ORM Explained 📦🔍
Laravel provides a powerful database system using Eloquent ORM (Object-Relational Mapping), making it easy to interact with databases.
1. Database Configuration
Laravel uses .env file for database settings.
✅ Open .env
and update:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=
💡 Run Migration to check if the connection works:
php artisan migrate
2. Creating a Model & Migration
Eloquent uses Models to interact with database tables.
✅ Run this command to create a model with a migration file:
php artisan make:model Product -m
This creates:
- Model:
app/Models/Product.php
- Migration:
database/migrations/xxxx_xx_xx_create_products_table.php
📄 File: database/migrations/xxxx_xx_xx_create_products_table.php
Modify the up()
method:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price', 8, 2);
$table->text('description')->nullable();
$table->timestamps();
});
}
💡 Run Migration to create the table:
php artisan migrate
3. Eloquent Model Setup
📄 File: app/Models/Product.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillable = ['name', 'price', 'description']; // Mass assignable fields
}
4. Performing CRUD Operations
Eloquent makes it easy to perform Create, Read, Update, Delete (CRUD) operations.
a) Insert Data (Create)
✅ Using Eloquent
use App\Models\Product;
Product::create([
'name' => 'Laptop',
'price' => 49999.99,
'description' => 'A high-performance laptop'
]);
✅ Using save()
Method
$product = new Product();
$product->name = "Smartphone";
$product->price = 19999.99;
$product->description = "A powerful smartphone";
$product->save();
b) Fetch Data (Read)
✅ Get all records
$products = Product::all();
✅ Get a single record by ID
$product = Product::find(1);
✅ Find by a specific column
$product = Product::where('name', 'Laptop')->first();
✅ Looping through records
foreach (Product::all() as $product) {
echo $product->name . " - ₹" . $product->price . "<br>";
}
c) Update Data
✅ Update using find()
$product = Product::find(1);
$product->price = 47999.99;
$product->save();
✅ Update using update()
Product::where('name', 'Laptop')->update(['price' => 45999.99]);
d) Delete Data
✅ Delete a record
$product = Product::find(1);
$product->delete();
✅ Delete using where()
Product::where('name', 'Smartphone')->delete();
✅ Delete all records
Product::truncate();
5. Eloquent Relationships
Eloquent makes handling relationships easy.
a) One-to-One Relationship
A User has one Profile.
✅ Migration: users
Table
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
✅ Migration: profiles
Table
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id')->unique();
$table->text('bio');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
✅ Model: User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
✅ Model: Profile.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
✅ Fetching User Profile
$user = User::find(1);
echo $user->profile->bio;
b) One-to-Many Relationship
A Category has many Products.
✅ Model: Category.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function products()
{
return $this->hasMany(Product::class);
}
}
✅ Fetching All Products in a Category
$category = Category::find(1);
foreach ($category->products as $product) {
echo $product->name;
}
c) Many-to-Many Relationship
A User has many Roles, and a Role belongs to many Users.
✅ Pivot Table Migration
Schema::create('role_user', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('role_id');
$table->timestamps();
});
✅ Model: User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
✅ Model: Role.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
✅ Assign Role to a User
$user = User::find(1);
$user->roles()->attach(2); // Assign role with ID 2
✅ Fetching Roles for a User
$user = User::find(1);
foreach ($user->roles as $role) {
echo $role->name;
}
6. Query Builder vs. Eloquent
Laravel provides Query Builder as an alternative to Eloquent.
✅ Using Query Builder
use Illuminate\Support\Facades\DB;
$products = DB::table('products')->get();
✅ Using Eloquent
$products = Product::all();
🚀 Eloquent is recommended as it provides a more readable and maintainable approach.
7. Database Seeding
Seeding allows inserting dummy data.
✅ Create a Seeder
php artisan make:seeder ProductSeeder
📄 File: database/seeders/ProductSeeder.php
use Illuminate\Database\Seeder;
use App\Models\Product;
class ProductSeeder extends Seeder
{
public function run()
{
Product::create([
'name' => 'Tablet',
'price' => 29999.99,
'description' => 'A lightweight tablet'
]);
}
}
✅ Run Seeder
php artisan db:seed --class=ProductSeeder
Conclusion
Eloquent ORM makes database handling simple, fast, and readable in Laravel. 🚀✨
Need any clarification? 😊
At Online Learner, we're on a mission to ignite a passion for learning and empower individuals to reach their full potential. Founded by a team of dedicated educators and industry experts, our platform is designed to provide accessible and engaging educational resources for learners of all ages and backgrounds.
Terms Disclaimer About Us Contact Us
Copyright 2023-2025 © All rights reserved.