đ§ 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;
});
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();
});
}
đš āĻĒā§āϰāĻļā§āύ ⧍. 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();
}
}
â
Post Model:
class Post extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
â
Video Model:
class Video extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
đ¸ āĻāĻŋāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ?
ā§§. Post-āĻ āĻāĻŽā§āύā§āĻ:
$post = Post::find(1);
$post->comments()->create([
'body' => 'āĻāĻ āĻĒā§āϏā§āĻāĻāĻž āĻĻāĻžāϰā§āύ āĻāĻŋāϞā§!',
]);
⧍. Video-āϤ⧠āĻāĻŽā§āύā§āĻ:
$video = Video::find(1);
$video->comments()->create([
'body' => 'āĻāĻŋāĻĄāĻŋāĻāĻāĻž āĻ
āϏāĻžāϧāĻžāϰāĻŖ!',
]);
ā§Š. āĻā§āύ Comment āĻāĻžāϰ āϏā§āĻāĻž āĻŦā§āϰ āĻāϰāĻž:
$comment = Comment::find(1);
$owner = $comment->commentable; // Post or Video
đš āĻĒā§āϰāĻļā§āύ ā§Š. 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,
];
đš ā§Ē. 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 āĻāĻžāϞāĻžā§
}
Eager Loading (Good Practice):
$posts = Post::with('comments')->get();
foreach ($posts as $post) {
echo $post->comments->count(); // āĻļā§āϧ⧠⧍āĻāĻž query āĻāĻžāϞāĻžāĻŦā§
}
â āĻĒāĻžāϰā§āĻĨāĻā§āϝ:
- 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;
}
āĻāĻāĻžāύ⧠āϧāϰā§āύ ā§§ā§Ļā§Ļ āĻāύ āĻāĻāĻāĻžāϰ āĻāĻā§āĨ¤ āϤāĻžāĻšāϞ⧠āĻšāĻŦā§:
- ā§§āĻāĻŋ query: users āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§
- ā§§ā§Ļā§ĻāĻāĻŋ query: āĻĒā§āϰāϤāĻŋāĻāĻŋ profile āĻāϰ āĻāύā§āϝ
= āĻŽā§āĻ ā§§ā§Ļā§§āĻāĻŋ query! āĻā§āĻāĻāϰ!
â
āϏāĻŽāĻžāϧāĻžāύ:
$users = User::with('profile')->get();
āĻāĻāύ ⧍āĻāĻŋ query āĻāϞāĻŦā§: ā§§āĻāĻž users, ā§§āĻāĻž profilesāĨ¤ Performance ā§Ģā§Ļx āĻāĻžāϞā§!
đšāĻĒā§āϰāĻļā§āύ ā§Ŧ. with() vs load() â āĻ āύā§āĻā§āĻ āĻā§āϞāĻŋā§ā§ āĻĢā§āϞā§
â with():
Query āĻāϰ āϏāĻŽā§ā§āĻ āϰāĻŋāϞā§āĻļāύ āύāĻŋā§ā§ āĻāϏā§āĨ¤ Query builder āĻāϰ āϏāĻžāĻĨā§ āĻāϞā§āĨ¤
$posts = Post::with('comments')->get();
â load():
Model āĻĒāĻžāĻā§āĻžāϰ āĻĒāϰ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āϰāĻŋāϞā§āĻļāύ āϞā§āĻĄ āĻāϰā§āĨ¤ Model instance āĻāϰ āϏāĻžāĻĨā§ āĻāϞā§āĨ¤
$post = Post::find(1);
$post->load('comments');
đĻ āĻāĻāύ āĻā§āύāĻāĻž?
- with() â āϝāĻāύ āĻāĻāϏāĻžāĻĨā§ query āĻāϰāϤ⧠āĻāĻžāύ
- load() â āϝāĻāύ model āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻā§, āĻĒāϰ⧠āϰāĻŋāϞā§āĻļāύ āĻĻāϰāĻāĻžāϰ
đšāĻĒā§āϰāĻļā§āύ ā§. Pagination āύāĻž āĻāĻžāύāϞ⧠āĻā§ āĻšā§?
â Laravel-āĻ Pagination āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āĻšā§āϤ⧠āĻāĻāĻŦāĻžāϰā§āĻ ā§Ģā§Ļā§ĻāĻāĻž āĻŦāĻž ā§Ģā§Ļā§Ļā§ĻāĻāĻž āĻĄāĻžāĻāĻž get() āĻĻāĻŋā§ā§ āύāĻŋā§ā§ āύāĻŋāĻā§āĻā§āύ! āĻāϤ⧠āĻšā§ā§ āϝāĻžāĻā§āĻā§ āĻŦāĻŋāĻļāĻžāϞ āĻāĻāĻāĻŋ āĻā§āϞ â āĻāĻžāϰāĻŖ āĻāϤ āĻĄāĻžāĻāĻž āĻāĻāϏāĻžāĻĨā§ RAM-āĻ āĻāĻ āĻžāύ⧠āĻŽāĻžāύ⧠āĻšāĻā§āĻā§: āϏāĻžāϰā§āĻāĻžāϰ āϏā§āϞā§, āϰā§āϏāĻĒāύā§āϏ āĻāĻžāĻāĻŽ āĻŦā§āĻļāĻŋ, āĻāĻŦāĻ āĻ ā§āϝāĻžāĻĒ āϧā§āϰ āĻāϤāĻŋāϰāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
$users = User::all(); // â â āϏāĻŦ user āĻāĻāĻŦāĻžāϰ⧠āĻā§āύ⧠āĻāύāĻā§
āĻāĻ āĻā§āĻĄ āϝāĻĻāĻŋ admin panel-āĻāϰ āĻā§āύ⧠āĻā§āĻŦāĻŋāϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻļā§āϰā§āϤā§āĻ ā§§ā§Ļ,ā§Ļā§Ļā§Ļ āĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āϏāĻŦ āĻĄāĻžāĻāĻž āĻā§āύ⧠āĻāύāĻā§ â āϝā§āĻāĻž āĻāĻāĻĻāĻŽāĻ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻĄ āύāĻžāĨ¤
āϏāĻŽāĻžāϧāĻžāύ:
$users = User::paginate(20); // â
āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ ⧍ā§ĻāĻāĻŋ āĻāϰ⧠āĻĄāĻžāĻāĻž āĻāϏāĻŦā§
āĻāĻāύ āĻļā§āϧ⧠āĻĒā§āϰāĻĨāĻŽ ⧍ā§ĻāĻāĻŋ 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)); // â āĻāĻ āϞāĻžāĻāύ⧠āĻāĻāĻāĻžāϰāĻā§ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻšā§
}
Good Way: (Queue āĻŦā§āϝāĻŦāĻšāĻžāϰ):
php artisan make:job SendWelcomeEmailJob
đ§ 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));
}
}
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']);
}
Queue āϏā§āĻāĻāĻĒ (āĻĄā§āĻ āĻāϞāĻā§āϞ â database)
php artisan queue:table
php artisan migrate
.env āĻĢāĻžāĻāϞ⧠āύāĻŋāĻā§āϰ āϞāĻžāĻāύāĻāĻŋ āϝā§āĻā§āϤ/āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ:
QUEUE_CONNECTION=database
āϤāĻžāϰāĻĒāϰ Queue Worker āĻāĻžāϞāĻžāύ:
php artisan queue:work
â āĻāĻāύ āĻā§ āĻšāϞā§?
- āĻāĻāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύ āĻāϰāϞā§
- 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)