🚀 Laravel-এর ম্যাজিক: একটি Model কীভাবে ডাটাবেজের সাথে কথা বলে?
Laravel শেখার সময় সবচেয়ে মুগ্ধ করার জিনিসগুলোর একটি হলো Eloquent Model। কারণ, মাত্র এক লাইন কোডেই আপনি ডাটাবেস থেকে ডাটা এনে ফেলতে পারেন!
$users = User::where('active', 1)->get();
দেখতে ম্যাজিক লাগলেও আসলে সবটাই খুব পরিকল্পিত আর্কিটেকচার। চলুন, এই ম্যাজিকের পেছনের পুরো প্রক্রিয়াটি সহজ ভাষায় বুঝে নেই।
Laravel-এর অভ্যন্তরে কাজ করে একটি “কারখানা” যেখানে আলাদা আলাদা কর্মী ও তাদের ভূমিকা রয়েছে:
-
Eloquent Model = ম্যানেজার
-
Query Builder = সুপারভাইজার
-
Grammar = দক্ষ কর্মী
-
PDO = ডেলিভারি ম্যান
এবার দেখি $users = User::where('active', 1)->get(); এই লাইনটি প্রসেস করতে তারা কীভাবে কাজ করে।
🔵 ধাপ ১: ম্যানেজারের নির্দেশ (Eloquent Model)
User::where('active', 1) লিখলে আপনি মডেলকে (ম্যানেজারকে) নির্দেশ দেন:
“আমাকে সক্রিয় ইউজারদের লিস্ট দাও।”
ম্যানেজার সরাসরি কাজ করে না। সে নির্দেশটি Query Builder, অর্থাৎ সুপারভাইজারের কাছে পাঠিয়ে দেয়।
🟣 ধাপ ২: সুপারভাইজারের পরিকল্পনা (Query Builder)
Query Builder নির্দেশ পাওয়ার পর একটি পরিকল্পনা তৈরি করে:
-
টেবিল:
users -
শর্ত:
active = 1
এখনো SQL তৈরি হয়নি। সুপারভাইজার কেবল প্ল্যান/ইনস্ট্রাকশন জমা করে রাখছে।
🟠 ধাপ ৩: দক্ষ কর্মীর অনুবাদ (Grammar)
যখন আপনি ->get() কল করেন, তখন সুপারভাইজার তার পরিকল্পনা Grammar-এর হাতে তুলে দেয় এবং বলে:
“এই ডেটা অনুযায়ী আসল SQL তৈরি করো।”
Grammar জানে কোন ডাটাবেস ব্যবহার হচ্ছে—MySQL, PostgreSQL, SQLite এবং সে সেই ভাষাতেই SQL বানায়।
আপনার প্রোজেক্টের `.env` ফাইলে যদি `DB_CONNECTION=mysql` লেখা থাকে, তাহলে সে MySQL-এর ভাষায় নির্দেশ লিখবে। যদি `postgresql` লেখা থাকতো, সে PostgreSQL-এর ভাষায় লিখতো।
যদি MySQL ব্যবহার করেন, তাহলে MySqlGrammar নিচের SQL জেনারেট করে:
SELECT * FROM `users` WHERE `active` = ?
? হলো placeholder, যেখানে PDO নিরাপদে 1 বসিয়ে দেয় , যা SQL Injection প্রতিরোধ করে।
🗂️ Grammar ক্লাস কোথায় থাকে?
ঠিক এখানেই:
vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/
এগুলো শুধু দেখার জন্য পরিবর্তন একদমই করা যাবে না।
🔴 ধাপ ৪: ডেলিভারি ম্যানের কাজ (PDO)
Grammar থেকে SQL পেয়ে Query Builder সেটি দেয় PDO-কে।
PDO হলো PHP-এর ডাটাবেস কমিউনিকেশন এক্সটেনশন।
PDO:
-
SQL এবং ভ্যালু (
1) ডাটাবেসে পাঠায় -
কোয়েরি চালায়
-
র (raw) ডাটা ফিরিয়ে আনে
🟢 ধাপ ৫: প্যাকেজিং এবং ডাটা রিটার্ন
PDO যে র ডাটা এনেছে, Query Builder সেটিকে সুন্দরভাবে প্যাকেজ করে:
-
প্রতিটি রো → একটি করে
Userঅবজেক্ট -
পুরো লিস্ট → একটি Laravel
Collection
শেষে ম্যানেজার (Eloquent) আপনাকে রেজাল্ট দিয়ে দেয় $users ভেরিয়েবলের মাধ্যমে।
⚡ সারসংক্ষেপ
Laravel-এর Eloquent কাজ করে এভাবে:
আপনার কোড → Eloquent (ম্যানেজার) → Query Builder (সুপারভাইজার) → Grammar (দক্ষ কর্মী) → PDO (ডেলিভারি ম্যান) → ডাটাবেস
এই প্রক্রিয়া জানলে—
-
কেন Eager Loading গুরুত্বপূর্ণ
-
কেন একই কোড MySQL/PostgreSQL দুটোতেই কাজ করে
-
Laravel কীভাবে Query Optimized করে
এসব সহজে বুঝতে পারবেন।
😊 শেষ কথা
Laravel-এ যখনই আপনি User::all() বা ->get() লিখবেন, এই কারখানার পুরো workflow মনে রাখুন—তাহলেই “ম্যাজিকের” পেছনের রহস্য আরও পরিষ্কার হয়ে যাবে।
কেমন লাগল জানাতে ভুলবেন না কমেন্টে! 🚀
Happy Coding! 🐞