DEV Community

Ruhul Amin Sujon
Ruhul Amin Sujon

Posted on

𝐏đĢ𝐨𝐒𝐨𝐟𝐭 𝐄𝐱𝐩𝐞đĢđĸ𝐞𝐧𝐜𝐞: 𝟑-𝟓 𝐘𝐞𝐚đĢ. Laravel IQ - Part-02

🧠 Laravel Developer, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϗ⧁āϞ⧋ āϜāĻžāύ⧇āύ āύāĻž? āĻļāĻŋāϖ⧇ āύāĻŋāύ ā§ŽāϟāĻŋ Core āĻŦāĻŋāώ⧟ !

❓ āφāĻĒāύāĻŋ āĻ•āĻŋ āύāĻŋāĻšā§‡āϰ Laravel āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āϜāĻžāύ⧇āύ āύāĻž?

  • Route Model Binding
  • Polymorphic Relationship
  • Middleware Priority
  • Eager Loading vs Lazy Loading
  • n+1 Query Problem
  • with() vs load() method-āĻāϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ
  • Pagination
  • Job & Queue System

✅ āϝāĻĻāĻŋ Laravel āĻ āĻ•āĻžāϜ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āĻāϗ⧁āϞ⧋ āϜāĻžāύāĻž āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ•āĨ¤ āύāĻž āϜāĻžāύāϞ⧇ āĻŦ⧜ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āφāĻĒāύāĻŋ āĻŦāĻžāϰāĻŦāĻžāϰ performance, maintainability āφāϰ bug āύāĻŋā§Ÿā§‡ āĻāĻžāĻŽā§‡āϞāĻžā§Ÿ āĻĒ⧜āĻŦ⧇āύāĨ¤

āϚāϞ⧁āύ āĻāϕ⧇ āĻāϕ⧇ āϏāĻŦāϗ⧁āϞ⧋ āϏāĻšāϜ āĻ­āĻžāώāĻžā§Ÿ āĻ“ āωāĻĻāĻžāĻšāϰāĻŖāϏāĻš āĻŦ⧁āĻā§‡ āύ⧇āχāĨ¤


🔹 āĻĒā§āϰāĻļā§āύ ā§§. Route Model Binding – ID āĻĻāĻŋā§Ÿā§‡ āφāϰ āĻāĻžāĻŽā§‡āϞāĻž āύāĻž!

🔍 URL āĻāϰ āĻŽāĻ§ā§āϝ⧇ ID āĻĻāĻŋāϞ⧇ Laravel āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ Model āϖ⧁āρāĻœā§‡ āĻāύ⧇ āĻĻāĻŋāĻŦ⧇

✅ āωāĻĻāĻžāĻšāϰāĻŖ:

Route::get('/users/{user}', function (User $user) {
    return $user->name;
});
Enter fullscreen mode Exit fullscreen mode

Laravel āύāĻŋāĻœā§‡ User::findOrFail($id) āϚāĻžāϞāĻŋā§Ÿā§‡ $user āύāĻžāĻŽā§‡āϰ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻĻāĻŋāĻŦ⧇āĨ¤ {user} āĻāĻ•āϟāĻŋ id āĻĻāĻŋāϞ⧇ Laravel āύāĻŋāĻœā§‡āχ User āĻŽāĻĄā§‡āϞ āĻĨ⧇āϕ⧇ āϏ⧇āχ id-āĻāϰ row āϖ⧁āρāĻœā§‡ $user-āĻ inject āĻ•āϰāĻŦ⧇āĨ¤

đŸ› ī¸ āϏ⧁āĻŦāĻŋāϧāĻž:

  • āϕ⧋āĻĄ āϛ⧋āϟ āĻšā§Ÿ
  • Route parameter-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāϰāĻžāϏāϰāĻŋ Eloquent model instance
  • āĻ…āĻŸā§‹ 404 āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ
  • IDE āĻ…āĻŸā§‹ suggest āĻ•āϰ⧇

➤ Custom Binding āĻ•āϰāĻž āϝāĻžā§Ÿ?

āĻšā§āϝāĻžāρ, āϝāĻĻāĻŋ āφāĻĒāύāĻŋ ID āĻ›āĻžā§œāĻž āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ field āĻĻāĻŋā§Ÿā§‡ binding āĻ•āϰāϤ⧇ āϚāĻžāύ āϝ⧇āĻŽāύ username, āϤāĻžāĻšāϞ⧇ RouteServiceProvider āĻ āφāĻĒāύāĻŋ define āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

public function boot()
{
    Route::bind('user', function ($value) {
        return \App\Models\User::where('username', $value)->firstOrFail();
    });
}
Enter fullscreen mode Exit fullscreen mode

🔹 āĻĒā§āϰāĻļā§āύ ⧍. Polymorphic Relationship: āĻāĻ• āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻĻāĻŋā§Ÿā§‡ āϏāĻŦ āĻ•āĻ­āĻžāϰ!

🔄 āĻāĻ•āχ Comment model āĻĻāĻŋā§Ÿā§‡ Post, Video, Image – āϏāĻŦāĻ•āĻŋāϛ⧁āϤ⧇ āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇

➤ āϕ⧀ āĻāϟāĻž?

Polymorphic Relationship āĻšāϞ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϰāĻŋāϞ⧇āĻļāύāĻļāĻŋāĻĒ āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ model āĻāĻ•āĻžāϧāĻŋāĻ• model-āĻāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āχ āϰāĻŋāϞ⧇āĻļāύāĻļāĻŋāĻĒ āĻĢāĻ°ā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

🔸 āϏāĻŽāĻ¸ā§āϝāĻž:

āφāĻĒāύāĻŋ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ“ā§Ÿā§‡āĻŦ āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāĻšā§āϛ⧇āύ āϝ⧇āĻ–āĻžāύ⧇:

  • āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇
  • āφāĻŦāĻžāϰ āĻ­āĻŋāĻĄāĻŋāĻ“āϤ⧇āĻ“ āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇

āĻāĻ–āύ āφāĻĒāύāĻŋ āĻ•āĻŋ āφāϞāĻžāĻĻāĻž post_comments, video_comments āĻŸā§‡āĻŦāĻŋāϞ āĻ•āϰāĻŦ⧇āύ?

āύāĻž, Laravel āĻŦāĻ˛ā§‡â€”āĻāĻ•āϟāĻžāχ comments āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻžāύāĻžāύ, āφāĻŽāϰāĻž āĻŦ⧁āĻā§‡ āύ⧇āĻŦ āϕ⧋āύāϟāĻž āĻ•āĻžāϰ āĻ•āĻŽā§‡āĻ¨ā§āϟāĨ¤

🔸 Laravel Polymorphic Relationship āĻĻāĻŋā§Ÿā§‡ āĻāĻŽāύ āĻšāĻŦ⧇:

🧾 Database Structure:

comments āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻĨāĻžāĻ•āĻŦ⧇:

  • id
  • body
  • commentable_id ➜ āϕ⧋āύ āϜāĻŋāύāĻŋāϏ⧇āϰ ID
  • commentable_type ➜ āϕ⧋āύ model (Post, Video)

🔸 Model Setup:

✅ Comment Model:

class Comment extends Model
{
    public function commentable()
    {
        return $this->morphTo();
    }
}
Enter fullscreen mode Exit fullscreen mode

✅ Post Model:

class Post extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}
Enter fullscreen mode Exit fullscreen mode

✅ Video Model:

class Video extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}
Enter fullscreen mode Exit fullscreen mode

🔸 āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

ā§§. Post-āĻ āĻ•āĻŽā§‡āĻ¨ā§āϟ:

$post = Post::find(1);
$post->comments()->create([
    'body' => 'āĻāχ āĻĒā§‹āĻ¸ā§āϟāϟāĻž āĻĻāĻžāϰ⧁āύ āĻ›āĻŋāϞ⧋!',
]);
Enter fullscreen mode Exit fullscreen mode

⧍. Video-āϤ⧇ āĻ•āĻŽā§‡āĻ¨ā§āϟ:

$video = Video::find(1);
$video->comments()->create([
    'body' => 'āĻ­āĻŋāĻĄāĻŋāĻ“āϟāĻž āĻ…āϏāĻžāϧāĻžāϰāĻŖ!',
]);
Enter fullscreen mode Exit fullscreen mode

ā§Š. āϕ⧋āύ Comment āĻ•āĻžāϰ āϏ⧇āϟāĻž āĻŦ⧇āϰ āĻ•āϰāĻž:

$comment = Comment::find(1);
$owner = $comment->commentable; // Post or Video
Enter fullscreen mode Exit fullscreen mode

🔹 āĻĒā§āϰāĻļā§āύ ā§Š. Middleware Priority – āĻ•āĻžāϰ āφāϗ⧇ āϕ⧇ āϚāϞāĻŦ⧇?

Laravel-āĻ āϏāĻŦ middleware āĻāĻ•āϏāĻžāĻĨ⧇ āϚāϞāϞ⧇ āϕ⧋āύ⧋āϟāĻž āφāϗ⧇ āϚāϞāĻŦ⧇ āφāϰ āϕ⧋āύāϟāĻž āĻĒāϰ⧇?

✅ āωāĻĻāĻžāĻšāϰāĻŖ:

āφāĻĒāύāĻŋ āĻāĻ•āϟāĻž middleware āĻŦāĻžāύāĻŋā§Ÿā§‡āϛ⧇āύ āϝāĻž language set āĻ•āϰ⧇, āφāϰ⧇āĻ•āϟāĻž middleware āφāϛ⧇ āϝāĻž auth āĻšā§‡āĻ• āĻ•āϰ⧇āĨ¤

Laravel āĻ middleware āϚāĻžāϞāĻžāύ⧋āϰ āĻ…āĻ°ā§āĻĄāĻžāϰ āϝāĻĻāĻŋ āĻ āĻŋāĻ• āύāĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ authenticated user āĻāϰ āĻ­āĻžāώāĻž āĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϏ⧇āϟ āύāĻž-āĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

✅ Priority āĻ āĻŋāĻ• āĻ•āϰāĻžāϰ āϜāĻžā§ŸāĻ—āĻž:

app/Http/Kernel.php āĻĢāĻžāχāϞ⧇ āύāĻŋāĻšā§‡ protected $middlewarePriority āĻ…āĻ‚āĻļ⧇ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

protected $middlewarePriority = [
    \App\Http\Middleware\SetLocale::class,
    \App\Http\Middleware\Authenticate::class,
];
Enter fullscreen mode Exit fullscreen mode

🔹 ā§Ē. Eager Loading vs Lazy Loading

📌 āϧāϰ⧁āύ āφāĻĒāύāĻžāϰ Post āφāϛ⧇, āφāϰ āϤāĻžāϰ āϏāĻžāĻĨ⧇ Comments āφāϛ⧇āĨ¤

Lazy Loading (Bad for performance if many):

$posts = Post::all();
foreach ($posts as $post) {
    echo $post->comments->count(); // āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋ āϞ⧁āĻĒ⧇ āĻāĻ•āĻŦāĻžāϰ query āϚāĻžāϞāĻžā§Ÿ
}
Enter fullscreen mode Exit fullscreen mode

Eager Loading (Good Practice):

$posts = Post::with('comments')->get();
foreach ($posts as $post) {
    echo $post->comments->count(); // āĻļ⧁āϧ⧁ ⧍āϟāĻž query āϚāĻžāϞāĻžāĻŦ⧇
}
Enter fullscreen mode Exit fullscreen mode

✅ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ:

  • Lazy Loading = āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āϞ⧋āĻĄ āĻšā§Ÿ (āϤāĻŦ⧇ āĻŦ⧇āĻļāĻŋ Query āϚāĻžāϞāĻžā§Ÿ)
  • Eager Loading = āφāϗ⧇āχ āϏāĻŦ āϰāĻŋāϞ⧇āĻļāύ āύāĻŋā§Ÿā§‡ āφāϏ⧇

āϧāϰ⧁āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ admin panel āĻŦāĻžāύāĻžāĻšā§āϛ⧇āύ, āϝ⧇āĻ–āĻžāύ⧇ ā§Ģā§ĻāϟāĻŋ order āϞāĻŋāĻ¸ā§āĻŸā§‡ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ customer āĻāĻŦāĻ‚ āϤāĻžāϰ profile āϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

  • āφāĻĒāύāĻŋ āϝāĻĻāĻŋ Lazy Loading āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ ā§§āϟāĻž orders + ā§Ģā§ĻāϟāĻž customers + ā§Ģā§ĻāϟāĻž profiles = ā§§ā§Ļā§§āϟāĻŋ Query!
  • āϝāĻĻāĻŋ Eager Loading āĻ•āϰ⧇āύ: Order::with(['customer.profile'])->get(); → ā§ŠāϟāĻŋ Query! âœ”ī¸

āĻāϟāĻžāχ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ — āĻŦ⧁āĻā§‡ āύāĻž āĻ•āϰāϞ⧇ performance āĻŽāĻžāϰ āĻ–āĻžā§ŸāĨ¤

🔹 āĻĒā§āϰāĻļā§āύ ā§Ģ. n+1 Query Problem – āĻ…āϜāĻžāĻ¨ā§āϤ⧇āχ āφāĻĒāύāĻžāϰ App āϧ⧀āϰ⧇ āĻšā§Ÿ!

🤕 āϏāĻŽāĻ¸ā§āϝāĻž āϕ⧀?

$users = User::all();
foreach ($users as $user) {
    echo $user->profile->phone;
}
Enter fullscreen mode Exit fullscreen mode

āĻāĻ–āĻžāύ⧇ āϧāϰ⧁āύ ā§§ā§Ļā§Ļ āϜāύ āχāωāϜāĻžāϰ āφāϛ⧇āĨ¤ āϤāĻžāĻšāϞ⧇ āĻšāĻŦ⧇:

  • ā§§āϟāĻŋ query: users āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇
  • ā§§ā§Ļā§ĻāϟāĻŋ query: āĻĒā§āϰāϤāĻŋāϟāĻŋ profile āĻāϰ āϜāĻ¨ā§āϝ

= āĻŽā§‹āϟ ā§§ā§Ļā§§āϟāĻŋ query! āϭ⧟āĻ‚āĻ•āϰ!

✅ āϏāĻŽāĻžāϧāĻžāύ:

$users = User::with('profile')->get();
Enter fullscreen mode Exit fullscreen mode

āĻāĻ–āύ ⧍āϟāĻŋ query āϚāϞāĻŦ⧇: ā§§āϟāĻž users, ā§§āϟāĻž profilesāĨ¤ Performance ā§Ģā§Ļx āĻ­āĻžāϞ⧋!

🔹āĻĒā§āϰāĻļā§āύ ā§Ŧ. with() vs load() – āĻ…āύ⧇āϕ⧇āχ āϗ⧁āϞāĻŋā§Ÿā§‡ āĻĢ⧇āϞ⧇

✅ with():

Query āĻāϰ āϏāĻŽā§Ÿā§‡āχ āϰāĻŋāϞ⧇āĻļāύ āύāĻŋā§Ÿā§‡ āφāϏ⧇āĨ¤ Query builder āĻāϰ āϏāĻžāĻĨ⧇ āϚāϞ⧇āĨ¤

$posts = Post::with('comments')->get();
Enter fullscreen mode Exit fullscreen mode

✅ load():

Model āĻĒāĻžāĻ“ā§ŸāĻžāϰ āĻĒāϰ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āϰāĻŋāϞ⧇āĻļāύ āϞ⧋āĻĄ āĻ•āϰ⧇āĨ¤ Model instance āĻāϰ āϏāĻžāĻĨ⧇ āϚāϞ⧇āĨ¤

$post = Post::find(1);
$post->load('comments');
Enter fullscreen mode Exit fullscreen mode

đŸšĻ āĻ•āĻ–āύ āϕ⧋āύāϟāĻž?

  • with() – āϝāĻ–āύ āĻāĻ•āϏāĻžāĻĨ⧇ query āĻ•āϰāϤ⧇ āϚāĻžāύ
  • load() – āϝāĻ–āύ model āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āφāϛ⧇, āĻĒāϰ⧇ āϰāĻŋāϞ⧇āĻļāύ āĻĻāϰāĻ•āĻžāϰ

🔹āĻĒā§āϰāĻļā§āύ ā§­. Pagination āύāĻž āϜāĻžāύāϞ⧇ āϕ⧀ āĻšā§Ÿ?

✅ Laravel-āĻ Pagination āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰāϞ⧇ āφāĻĒāύāĻŋ āĻšā§ŸāϤ⧋ āĻāĻ•āĻŦāĻžāϰ⧇āχ ā§Ģā§Ļā§ĻāϟāĻž āĻŦāĻž ā§Ģā§Ļā§Ļā§ĻāϟāĻž āĻĄāĻžāϟāĻž get() āĻĻāĻŋā§Ÿā§‡ āύāĻŋā§Ÿā§‡ āύāĻŋāĻšā§āϛ⧇āύ! āĻāϤ⧇ āĻšā§Ÿā§‡ āϝāĻžāĻšā§āϛ⧇ āĻŦāĻŋāĻļāĻžāϞ āĻāĻ•āϟāĻŋ āϭ⧁āϞ – āĻ•āĻžāϰāĻŖ āĻāϤ āĻĄāĻžāϟāĻž āĻāĻ•āϏāĻžāĻĨ⧇ RAM-āĻ āωāĻ āĻžāύ⧋ āĻŽāĻžāύ⧇ āĻšāĻšā§āϛ⧇: āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ¸ā§āϞ⧋, āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϟāĻžāχāĻŽ āĻŦ⧇āĻļāĻŋ, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĒ āϧ⧀āϰ āĻ—āϤāĻŋāϰāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

$users = User::all(); // ❌ – āϏāĻŦ user āĻāĻ•āĻŦāĻžāϰ⧇ āĻŸā§‡āύ⧇ āφāύāϛ⧇
Enter fullscreen mode Exit fullscreen mode

āĻāχ āϕ⧋āĻĄ āϝāĻĻāĻŋ admin panel-āĻāϰ āϕ⧋āύ⧋ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āĻļ⧁āϰ⧁āϤ⧇āχ ā§§ā§Ļ,ā§Ļā§Ļā§Ļ āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϏāĻŦ āĻĄāĻžāϟāĻž āĻŸā§‡āύ⧇ āφāύāϛ⧇ – āϝ⧇āϟāĻž āĻāĻ•āĻĻāĻŽāχ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜāĻĄ āύāĻžāĨ¤

āϏāĻŽāĻžāϧāĻžāύ:

$users = User::paginate(20); // ✅ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ ⧍ā§ĻāϟāĻŋ āĻ•āϰ⧇ āĻĄāĻžāϟāĻž āφāϏāĻŦ⧇
Enter fullscreen mode Exit fullscreen mode

āĻāĻ–āύ āĻļ⧁āϧ⧁ āĻĒā§āϰāĻĨāĻŽ ⧍ā§ĻāϟāĻŋ user āφāϏāĻŦ⧇, pagination link āĻĨāĻžāĻ•āĻŦ⧇ (Next, Previous), UI-āĻ“ āĻĻā§āϰ⧁āϤ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ•āϰāĻŦ⧇āĨ¤

Laravel Pagination āφāĻĒāύāĻžāϕ⧇ built-in pagination link ({{ $users->links() }}) āĻĻāĻŋā§Ÿā§‡ āĻĻā§‡ā§Ÿ, āϝ⧇āĻ–āĻžāύ⧇ Bootstrap āĻŦāĻž Tailwind UI āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ render āĻšā§ŸāĨ¤


âš ī¸ Pagination āύāĻž āĻŦ⧁āĻāϞ⧇ āϕ⧀ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇?

  • āĻŦ⧜ āĻĄāĻžāϟāĻžāϏ⧇āϟ āϞ⧋āĻĄ āĻ•āϰāϞ⧇ memory overflow āĻšā§Ÿā§‡ āϝāĻžā§Ÿ
  • User interface āĻšā§āϝāĻžāĻ‚ āĻ•āϰ⧇
  • Lazy loading āĻŦāĻž infinite scroll āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻž
  • Mobile user-āĻĻ⧇āϰ āϜāĻ¨ā§āϝ page load time āĻŦā§‡ā§œā§‡ āϝāĻžā§Ÿ

✅ āĻĒā§āϰāĻĢ⧇āĻļāύāĻžāϞ Laravel āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻšāϞ⧇ Pagination āĻŽāĻžāĻ¸ā§āϟ!

  • āϏāĻŦ āϞāĻŋāĻ¸ā§āĻŸā§‡ paginate() āĻŦāĻž simplePaginate() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ
  • API āĻŦāĻžāύāĻžāϞ⧇ meta, links āϏāĻš JSON āĻĢāĻ°ā§āĻŽā§āϝāĻžāĻŸā§‡ paginate āĻ•āϰ⧁āύ
  • Blade āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡ {{ $items->links() }} āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϭ⧁āϞāĻŦ⧇āύ āύāĻž

🔹āĻĒā§āϰāĻļā§āύ ā§Ž. Job & Queue System āύāĻž āϜāĻžāύāϞ⧇ āϕ⧀ āĻšā§Ÿ?

✅ Laravel-āĻ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āϏāĻŦ āĻ•āĻžāϜ āϰāĻŋā§Ÿā§‡āϞ-āϟāĻžāχāĻŽā§‡ controller-āĻāϰ āϭ⧇āϤāϰ āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āύ — āϝ⧇āĻŽāύ, āχāĻŽā§‡āχāϞ āĻĒāĻžāĻ āĻžāύ⧋, āĻĢāĻžāχāϞ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚, API āĻĨ⧇āϕ⧇ āĻŦ⧜ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāύāĻžāύ⧋ — āϤāĻžāĻšāϞ⧇ āχāωāϜāĻžāϰāϕ⧇ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻšā§ŸāĨ¤ āĻāϤ⧇ āĻ…ā§āϝāĻžāĻĒ āϧ⧀āϰ āĻšā§Ÿā§‡ āϝāĻžā§Ÿ, āχāωāϜāĻžāϰ āĻŦāĻŋāϰāĻ•ā§āϤ āĻšā§ŸāĨ¤

Laravel āφāĻĒāύāĻžāϕ⧇ Job & Queue-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϏ⧇āχ āĻ•āĻžāϜāϗ⧁āϞ⧋ āϚāĻžāϞāĻžāύ⧋āϰ āϏ⧁āϝ⧋āĻ— āĻĻā§‡ā§ŸāĨ¤

🔧 āωāĻĻāĻžāĻšāϰāĻŖ

āϧāϰ⧁āύ, āϕ⧇āω āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰ⧇āĻļāύ āĻ•āϰāϞ⧋āĨ¤ āϤāĻ–āύ āφāĻĒāύāĻŋ āϚāĻžāχāϛ⧇āύ āϤāĻžāϕ⧇ āĻāĻ•āϟāĻŋ Welcome Email āĻĒāĻžāĻ āĻžāϤ⧇āĨ¤

Wrong Way: (āϏāĻŦ āĻāĻ•āϏāĻžāĻĨ⧇):

public function register(Request $request)
{
    // User create...
    Mail::to($user->email)->send(new WelcomeMail($user)); // ❌ āĻāχ āϞāĻžāχāύ⧇ āχāωāϜāĻžāϰāϕ⧇ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻšā§Ÿ
}
Enter fullscreen mode Exit fullscreen mode

Good Way: (Queue āĻŦā§āϝāĻŦāĻšāĻžāϰ):

php artisan make:job SendWelcomeEmailJob
Enter fullscreen mode Exit fullscreen mode

🧠 SendWelcomeEmailJob.php

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;

class SendWelcomeEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    public function __construct($user)
    {
        $this->user = $user;
    }

    public function handle(): void
    {
        Mail::to($this->user->email)->send(new WelcomeMail($this->user));
    }
}
Enter fullscreen mode Exit fullscreen mode

Controller-āĻ Job Dispatch āĻ•āϰāĻž

public function register(Request $request)
{
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password),
    ]);

    // ✅ āχāĻŽā§‡āχāϞ āĻĒāĻžāĻ āĻžāύ⧋ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϚāϞ⧇ āϝāĻžāĻŦ⧇:
    dispatch(new SendWelcomeEmailJob($user));

    return response()->json(['message' => 'Registration successful']);
}
Enter fullscreen mode Exit fullscreen mode

Queue āϏ⧇āϟāφāĻĒ (āĻĄā§‡āĻ­ āĻāϞāϭ⧇āϞ — database)

php artisan queue:table
php artisan migrate

.env āĻĢāĻžāχāϞ⧇ āύāĻŋāĻšā§‡āϰ āϞāĻžāχāύāϟāĻŋ āϝ⧁āĻ•ā§āϤ/āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ:
QUEUE_CONNECTION=database

āϤāĻžāϰāĻĒāϰ Queue Worker āϚāĻžāϞāĻžāύ:
php artisan queue:work
Enter fullscreen mode Exit fullscreen mode

✅ āĻāĻ–āύ āϕ⧀ āĻšāϞ⧋?

  • āχāωāϜāĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰ⧇āĻļāύ āĻ•āϰāϞ⧋
  • response āĻĒ⧇āϞ ā§§ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇
  • Welcome Email meanwhile āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āĻ—āĻŋā§Ÿā§‡āχ āϚāϞ⧇ āϗ⧇āϞ, āϏ⧇ āĻŦ⧁āĻāϞ⧋āĻ“ āύāĻž!

âš ī¸ Job & Queue System āύāĻž āϜāĻžāύāϞ⧇ āϝāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇:

  • āχāωāϜāĻžāϰ Action āĻ•āϰāϞ⧇ response āĻĒ⧇āϤ⧇ āϏāĻŽā§Ÿ āĻŦ⧇āĻļāĻŋ āϞāĻžāϗ⧇
  • Server Load āĻŦā§‡ā§œā§‡ āϝāĻžā§Ÿ
  • āχāĻŽā§‡āχāϞ, SMS āĻŦāĻž āĻŦ⧜ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻ āĻ•āĻžāϜ āĻ¸ā§āϞ⧋ āĻšā§Ÿā§‡ āϝāĻžā§Ÿ
  • Real-time Notification āĻĻ⧇āĻ“ā§ŸāĻž āϏāĻŽā§āĻ­āĻŦ āĻšā§Ÿ āύāĻž
  • āφāϗ⧇ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Mail::send() āϏāϰāĻžāϏāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇āύ, āϤāĻžāĻšāϞ⧇ āĻĒ⧁āϰ⧋ Email Sending āĻŦā§āϞāĻ• āĻ•āϰ⧇ āϰāĻžāĻ–āϤ⧋ āχāωāϜāĻžāϰāϕ⧇āĨ¤
  • āĻāĻ–āύ Job + Queue āĻĻāĻŋā§Ÿā§‡ āϏāĻŦ async āĻšā§Ÿā§‡ āϗ⧇āϛ⧇ — āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āĻ“ āϚāĻžāĻĒ āĻ•āĻŽ, āχāωāϜāĻžāϰāĻ“ āϖ⧁āĻļāĻŋāĨ¤

🧠 āωāĻĒāϏāĻ‚āĻšāĻžāϰ

Laravel āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•āĻžāϜ āϚāĻžāϞāĻŋā§Ÿā§‡ āύ⧇āĻ“ā§ŸāĻž āφāϰ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϞ⧇āϭ⧇āϞ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻ…āύ⧇āĻ• āϤāĻĢāĻžā§ŽāĨ¤

āϝ⧇ āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āύāĻž āϜāĻžāύāϞ⧇ āφāĻĒāύāĻŋ āĻĒā§āϰāĻžā§Ÿ āύāĻŋāĻļā§āϚāĻŋāϤāĻ­āĻžāĻŦ⧇āχ āϏāĻŽāĻ¸ā§āϝāĻžā§Ÿ āĻĒ⧜āĻŦ⧇āύ:

  • Route Model Binding āύāĻž āϜāĻžāύāϞ⧇ āĻĒā§āϰāϤāĻŋ āϰāĻžāωāĻŸā§‡ boilerplate āϕ⧋āĻĄ āϞāĻŋāĻ–āϤ⧇ āĻšā§Ÿ
  • Polymorphic Relationship āύāĻž āϜāĻžāύāϞ⧇ āĻŦāĻžāϰāĻŦāĻžāϰ structure āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻšā§Ÿ
  • Middleware Priority āύāĻž āĻŦ⧁āĻāϞ⧇ request flow unpredictable āĻšā§Ÿā§‡ āĻĒā§œā§‡
  • Eager vs Lazy Loading āύāĻž āϜāĻžāύāϞ⧇ āĻŦā§āϝāĻžāϕ⧇āĻ¨ā§āĻĄ āϧ⧀āϰāĻ—āϤāĻŋāϰ āĻšā§Ÿ
  • n+1 Problem āĻĨ⧇āϕ⧇ Performance āĻŽāĻžāϰ āĻ–āĻžā§Ÿ
  • with() vs load() āĻāϰ misuse āĻ•āϰ⧇ Unnecessary Query āϚāϞ⧇
  • Pagination āĻ›āĻžā§œāĻž āĻŦ⧜ āĻĄāĻžāϟāĻž āϞāĻŋāĻ¸ā§āϟ āĻ•āϰāϞ⧇ āĻ…ā§āϝāĻžāĻĒ āĻšā§āϝāĻžāĻ‚ āĻ•āϰ⧇
  • Job & Queue System āύāĻž āϜāĻžāύāϞ⧇ āχāωāϜāĻžāϰāϕ⧇ āĻŦ⧇āĻļāĻŋ āϏāĻŽā§Ÿ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻžāϤ⧇ āĻšā§Ÿ

đŸ“ĸ āĻļ⧇āώ āĻ•āĻĨāĻž

Laravel āĻļ⧇āĻ–āĻž āĻŽāĻžāύ⧇āχ āĻļ⧁āϧ⧁ Route, Controller, Model āϜāĻžāύāĻž āύ⧟āĨ¤ āφāĻĒāύāĻžāϕ⧇ āϜāĻžāύāϤ⧇ āĻšāĻŦ⧇ Performance, Scalability āĻāĻŦāĻ‚ Maintainability— āϝāĻžāϤ⧇ āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇āϰ āĻ…ā§āϝāĻžāĻĒ āĻŦ⧜ āĻšāϞ⧇āĻ“ āφāĻĒāύāĻŋ āĻāĻ•āĻžāχ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

Top comments (0)