লারাভেল: ডাটাবেজ বেসিকস একটি সহজ ব্যাখ্যা — Laravel : Database Basics | Part 9

Abu Sayed
4 min readFeb 18, 2024

এই পোস্টটি লারাভেল ফ্রেমওয়ার্কে ডাটাবেজ ব্যবহার করার মৌলিক বিষয়গুলো নিয়ে আলোচনা করে। এখানে ডাটাবেজ মাইগ্রেশন, মডেল, এলোকুয়েন্ট ORM এবং রিলেশনশিপ সম্পর্কে তথ্য রয়েছে। উদাহরণ এবং একটি ছোট প্রোগ্রাম দিয়ে এগুলোকে বুঝতে সহজ করা হয়েছে। ( Laravel : Database Basics )

লারাভেল: ডাটাবেজ বেসিকস একটি সহজ ব্যাখ্যা — 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কোড লেখা থেকে বাঁচিয়েছে। আশা করি এখন থেকে আপনিও লারাভেলের এই অসাধারণ ডাটাবেজ সিস্টেম ব্যবহার করতে পারবেন আপনার অ্যাপ্লিকেশনে।

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Abu Sayed
Abu Sayed

Written by Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Unity, C#. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed

No responses yet

What are your thoughts?