লারাভেল: ডাটাবেজ বেসিকস একটি সহজ ব্যাখ্যা — Laravel : Database Basics | Part 9
এই পোস্টটি লারাভেল ফ্রেমওয়ার্কে ডাটাবেজ ব্যবহার করার মৌলিক বিষয়গুলো নিয়ে আলোচনা করে। এখানে ডাটাবেজ মাইগ্রেশন, মডেল, এলোকুয়েন্ট ORM এবং রিলেশনশিপ সম্পর্কে তথ্য রয়েছে। উদাহরণ এবং একটি ছোট প্রোগ্রাম দিয়ে এগুলোকে বুঝতে সহজ করা হয়েছে। ( Laravel : Database Basics )
হ্যালো বন্ধুরা, আজকে আমরা লারাভেলে ডাটাবেজ ব্যবহার করা নিয়ে আলোচনা করব
যেহেতু ওয়েব অ্যাপগুলোর বেশিরভাগই ডাটাবেজের সাথে জড়িত, তাই লারাভেলও এই বিষয়টিকে খুব গুরুত্ব দিয়েছে। তারা তাদের নিজস্ব এলোকুয়েন্ট ORM ব্যবহার করে যা ডাটাবেজের সাথে খুব সহজে ইন্টারঅ্যাকট করতে দেয়।
প্রথমেই আসা যাক ডাটাবেজ মাইগ্রেশনের কথায়
ডাটাবেজ মাইগ্রেশন হল এমন একটি ফিচার যা আপনাকে সহজেই আপনার ডাটাবেজ structure পরিবর্তন করতে দেয়। উদাহরণস্বরূপ, ধরুন আপনি একটি নতুন টেবিল যোগ করতে চান অথবা বর্তমান একটি টেবিলে কলাম বাড়াতে চান। সাধারণভাবে আপনাকে SQL কোড লিখতে হবে। কিন্তু লারাভেলে আপনি শুধু টারমিনালে একটি কমান্ড রান করলেই টাস্কটি সম্পন্ন হবে।
php artisan make:migration create_users_table
এই কমান্ডটি আপনার জন্য একটি মাইগ্রেশন ফাইল তৈরি করবে। এখানে আপনি up
এবং down
মেথডগুলোতে SQL লিখতে পারবেন। up
মেথডে আপনার টেবিল তৈরির কোড থাকবে আর down
মেথডে কীভাবে টেবিলটি ড্রপ করবেন সেই কোড থাকবে।
একটু উদাহরণ দেখি
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
এখানে up
মেথডে আমরা users
টেবিলটি তৈরি করছি এবং সেখানে বিভিন্ন কলাম যোগ করছি। down
মেথডে আমরা শুধু বলছি যদি টেবিলটি থাকে তাহলে ড্রপ করে দাও।
মাইগ্রেশনগুলো রান করতে আমাদের টারমিনালে এই কমান্ডটি লিখতে হবে:
php artisan migrate
এবং যদি আমরা পিছনে ফিরে যেতে চাই, তাহলে:
php artisan migrate:rollback
এইভাবে দেখতে পাচ্ছেন, মাইগ্রেশন আমাদের ডাটাবেজ ম্যানেজ করতে অনেক সহজ করে দিয়েছে।
এবার আসা যাক মডেল এবং এলোকুয়েন্টের কথায়
লারাভেলের এলোকুয়েন্ট হল একটি অবজেক্ট রিলেশনাল ম্যাপার (ORM)। এটি আমাদের ডাটাবেজের সাথে খুব সহজে কাজ করতে দেয়। প্রতিটি টেবিলের জন্য আমাদের একটি মডেল থাকবে। এই মডেলগুলোই এলোকুয়েন্ট ব্যবহার করে ডাটাবেজের সাথে ইন্টারঅ্যাকট করবে।
উদাহরণস্বরূপ, ধরুন আমাদের একটি User
মডেল আছে। এখন যদি আমরা সব users
টেবিলের সব রেকর্ড পেতে চাই, তাহলে আমরা লিখব:
$users = User::all();
বাহ, এতটুকুই! User
মডেলটি পিছনে এলোকুয়েন্টের সাহায্য নিয়ে users
টেবিল থেকে সব রেকর্ড নিয়ে আসবে।
অথবা ধরুন আমরা নতুন একটা ইউজার তৈরি করতে চাই:
$user = new User;
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->password = bcrypt('password');
$user->save();
এখানে $user
অবজেক্টটি এলোকুয়েন্টের মাধ্যমে users
টেবিলে একটি নতুন রো ইনসার্ট করবে। আর bcrypt
হল একটি লারাভেল হেল্পার ফাংশন যা পাসওয়ার্ডটিকে এনক্রিপ্ট করে দেয়।
এবার আসা যাক রিলেশনশিপের কথায়
ডাটাবেজের রিলেশনশিপ একটি খুবই গুরুত্বপূর্ণ বিষয়। এটি আমাদের মডেলগুলোকে পরস্পরের সাথে লিংক করতে দেয়। উদাহরণস্বরূপ, ধরুন একজন ইউজার অনেকগুলো পোস্ট লিখতে পারে। এক্ষেত্রে User
মডেল এবং Post
মডেলের মধ্যে একটি one-to-many রিলেশন থাকবে।
লারাভেলে এটি খুবই সহজ। আমাদের শুধু User
মডেলে একটি ফাংশন লিখতে হবে:
public function posts()
{
return $this->hasMany(Post::class);
}
এবং Post
মডেলে একটি ফাংশন লিখতে হবে:
public function user()
{
return $this->belongsTo(User::class);
}
এরপর যদি আমরা চাই একজন ইউজারের সব পোস্ট দেখতে, তাহলে আমরা লিখব:
$posts = $user->posts;
আর যদি আমরা একটি পোস্টের লেখক জানতে চাই, তাহলে আমরা লিখব:
$author = $post->user;
দেখতে পাচ্ছেন তো, রিলেশনশিপ ব্যবহার করা কতটা সহজ? এলোকুয়েন্ট আমাদের পিছনে থেকে সব কাজ করে দিচ্ছে।
একটু আরও জটিল রিলেশন দেখি
ধরুন, একজন ইউজার অনেকগুলো পোস্ট লিখতে পারে এবং একটি পোস্টে অনেকগুলো কমেন্ট থাকতে পারে। এক্ষেত্রে আমাদের একটি প্রতিটি ইউজার, পোস্ট এবং কমেন্টের জন্য একটি মডেল থাকবে। এবং রিলেশনগুলো হবে:
- একজন ইউজার অনেকগুলো পোস্ট লিখতে পারে (one-to-many)
- একটি পোস্টে অনেকগুলো কমেন্ট থাকতে পারে (one-to-many)
- একটি কমেন্টের একজন লেখক থাকতে পারে (one-to-one)
এগুলোকে লারাভেলে এভাবে লিখা যায়:
// User Model
public function posts()
{
return $this->hasMany(Post::class);
}
// Post Model
public function user()
{
return $this->belongsTo(User::class);
}public function comments()
{
return $this->hasMany(Comment::class);
}// Comment Model
public function post()
{
return $this->belongsTo(Post::class);
}public function author()
{
return $this->belongsTo(User::class, 'user_id');
}
এখানে আমরা Post
মডেলে একটি comments
মেথড যোগ করেছি যা hasMany
রিলেশন দেখায়। আর Comment
মডেলে একটি post
মেথড আছে যা belongsTo
রিলেশন দেখায়। এছাড়া আমরা একটি author
মেথড যোগ করেছি যেখানে আমরা user_id
কলামটিকে রিফারেন্স করছি কারণ কমেন্টের লেখকের আইডি সেখানে থাকবে।
এরপর আমরা এই মেথডগুলো ব্যবহার করে বিভিন্ন রকম কাজ করতে পারব। উদাহরণস্বরূপ:
$user = User::find(1);
$posts = $user->posts; // একজন ইউজারের সব পোস্ট
$post = Post::find(1);
$comments = $post->comments; // একটি পোস্টের সব কমেন্ট$comment = Comment::find(1);
$author = $comment->author; // একটি কমেন্টের লেখক
এইভাবে লারাভেলে রিলেশনশিপ অনেক সহজ এবং সুন্দরভাবে করা যায়।
সারা কথা
সুতরাং বন্ধুরা, আজকে আমরা লারাভেলে ডাটাবেজের মৌলিক বিষয়গুলোর উপর আলোকপাত করলাম। মাইগ্রেশনের মাধ্যমে আপনি কীভাবে সহজে ডাটাবেজ স্ট্রাকচার পরিবর্তন করতে পারেন তা দেখলাম। এলোকুয়েন্ট ORM আমাদের ডাটাবেজের সাথে খুব সহজেই কাজ করার সুযোগ দিয়েছে। আর লারাভেলের রিলেশনশিপের ফিচারগুলোও কতটা সহজ ও শক্তিশালী তা দেখলাম। পুরো জিনিসটাই খুবই সিম্পল এবং অ্যাবস্ট্রাকশন লেয়ারগুলো আমাদের জটিল SQLকোড লেখা থেকে বাঁচিয়েছে। আশা করি এখন থেকে আপনিও লারাভেলের এই অসাধারণ ডাটাবেজ সিস্টেম ব্যবহার করতে পারবেন আপনার অ্যাপ্লিকেশনে।