Symfony-এর Entities হল ক্লাস যা ডাটাবেসের টেবিল এর প্রতিনিধিত্ব করে। Symfony Doctrine ORM (Object-Relational Mapping) ব্যবহার করে, যার মাধ্যমে PHP অবজেক্টগুলোকে ডাটাবেস টেবিলের রেকর্ডে রূপান্তর করা হয়। এটি ডেটাবেসের সাথে কাজ করার জন্য একটি সহজ এবং প্রভাবশালী উপায় সরবরাহ করে।
এখানে Symfony-তে Entities তৈরি ও ম্যাপিং করার প্রক্রিয়া আলোচনা করা হয়েছে।
Entities কী?
Entity হল একটি PHP ক্লাস যা ডাটাবেস টেবিল বা ভিউ-এর সাথে সম্পর্কিত। এটি ডেটাবেসের রেকর্ড বা রো গুলোর প্রতিনিধিত্ব করে এবং Doctrine ORM এটি ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে।
Doctrine ORM (Object-Relational Mapping):
Doctrine ORM Symfony-তে ডাটাবেসের জন্য ব্যবহৃত একটি শক্তিশালী টুল। এটি PHP অবজেক্টগুলোকে ডাটাবেস টেবিলের রেকর্ডের সাথে মেলাতে সাহায্য করে এবং SQL কোড লেখার প্রয়োজন কমায়।
Doctrine-এ Entity সাধারণত একটি ক্লাস এবং এতে কিছু প্রপার্টি (fields) থাকে, যেগুলি ডাটাবেসের টেবিলের কলামের সাথে মেলে। Entity ক্লাসে Annotation বা XML/YAML কনফিগারেশন ব্যবহার করে ডাটাবেসের সাথে সম্পর্ক তৈরি করা হয়।
Symfony-তে Entity তৈরি করার প্রক্রিয়া
Symfony-তে Entity তৈরি করার জন্য make:entity কমান্ড ব্যবহার করা হয়।
Step 1: Entity তৈরি করা
Symfony CLI ব্যবহার করে নতুন Entity তৈরি করা:
php bin/console make:entity
এটি আপনাকে প্রশ্ন করবে:
- Entity এর নাম (যেমন:
Product,User) - Entity-তে ফিল্ড নাম এবং ধরন (যেমন:
string,integer,date,boolean)
উদাহরণ:
php bin/console make:entity
Entity Name (e.g. Product): Product
New field name (press to stop adding fields): name
Field type (enter ? to see all types) [string]: string
Field length [255]: 100
এটি একটি Product Entity তৈরি করবে, যা name ফিল্ড ধারণ করবে এবং এটি string টাইপ হবে।
Step 2: Entity ক্লাস তৈরি
Entity ক্লাসটি src/Entity ডিরেক্টরিতে তৈরি হয়। উদাহরণস্বরূপ, যদি আপনি Product Entity তৈরি করেন, এটি দেখতে এমন হবে:
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $name;
// Getter and Setter methods
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}
@ORM\Entity: এই অ্যনোটেশনটি Doctrine কে জানায় যে এটি একটি Entity এবং এটি ডাটাবেস টেবিলের সাথে সম্পর্কিত।@ORM\Column: প্রতিটি প্রপার্টির জন্য এই অ্যনোটেশনটি কলামের ধরণ এবং বৈশিষ্ট্য নির্ধারণ করে। উদাহরণস্বরূপ,nameপ্রপার্টিstringধরনের কলাম হবে।@ORM\Idএবং@ORM\GeneratedValue: এই অ্যনোটেশনগুলিidপ্রপার্টি সিলেক্ট করে এবং এটিকে প্রধান কী (Primary Key) হিসেবে চিহ্নিত করে।
Step 3: ডাটাবেস মাইগ্রেশন (Database Migration)
Entity তৈরি করার পর, ডাটাবেসে টেবিলের জন্য মাইগ্রেশন তৈরি এবং প্রয়োগ করতে হয়। Symfony Doctrine-এর জন্য Doctrine Migrations সরবরাহ করে, যা ডাটাবেসের কাঠামো পরিচালনা করতে সহায়ক।
মাইগ্রেশন তৈরি করা:
php bin/console make:migration
এটি আপনার Entity থেকে ডাটাবেস মাইগ্রেশন ফাইল তৈরি করবে।
মাইগ্রেশন প্রয়োগ করা:
php bin/console doctrine:migrations:migrate
এটি তৈরি করা মাইগ্রেশন প্রয়োগ করবে এবং ডাটাবেসে Product টেবিল তৈরি করবে।
Entities ম্যাপিং (Mapping) এবং সম্পর্ক
Doctrine ORM Entities এর মধ্যে সম্পর্ক তৈরি করার জন্য অনেক ধরনের ম্যাপিং সমর্থন করে। কিছু সাধারণ সম্পর্কের উদাহরণ:
- One-to-One (এক-এক সম্পর্ক)
- One-to-Many (এক-many সম্পর্ক)
- Many-to-Many (many-many সম্পর্ক)
One-to-Many সম্পর্ক উদাহরণ:
এখানে, Product Entity এবং Category Entity এর মধ্যে One-to-Many সম্পর্ক তৈরি করা হচ্ছে।
// src/Entity/Category.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
*/
class Category
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="category")
*/
private $products;
// Getter and Setter methods
}
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
// Other fields...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="products")
* @ORM\JoinColumn(nullable=false)
*/
private $category;
// Getter and Setter methods
}
এখানে:
@ORM\ManyToOne:ProductEntity-কেCategoryEntity এর সাথে যুক্ত করছে। অর্থাৎ, একাধিকProductএকটিCategoryএর অন্তর্গত হতে পারে।@ORM\OneToMany:CategoryEntity-এ একাধিকProductথাকতে পারে।
Conclusion
Symfony-তে Entity তৈরি এবং ম্যাপিং একটি গুরুত্বপূর্ণ প্রক্রিয়া যা Doctrine ORM ব্যবহার করে ডাটাবেস টেবিলের সাথে PHP ক্লাসের সম্পর্ক তৈরি করে। এটি Model-View-Controller (MVC) ডিজাইন প্যাটার্নের অংশ হিসেবে ডাটাবেস পরিচালনা এবং কার্যকর ডেটা ইন্টারঅ্যাকশন সহজ করে তোলে। Entity তৈরি করার পর migrations ব্যবহার করে ডাটাবেসের কাঠামো পরিবর্তন করা যায় এবং এর মাধ্যমে ডাটাবেসের ডেটা সুরক্ষিতভাবে সংরক্ষিত ও পরিচালিত হয়।
Read more