Laravel Eloquent Model Conventions হলো একটি সেট রুল বা ডিফল্ট নিয়ম যা মডেল এবং ডাটাবেস টেবিলের মধ্যে সংযোগ তৈরি করে। এই কনভেনশনগুলো মেনে চললে কোড লেখার পরিমাণ কমে যায় এবং ডেভেলপমেন্ট আরও সহজ হয়। তবে আপনি চাইলে এই ডিফল্ট কনভেনশনগুলো কাস্টমাইজ করেও ব্যবহার করতে পারেন।
Laravel Eloquent Model Conventions
১. টেবিলের নাম (Table Name)
ডিফল্টভাবে, Eloquent মডেল একটি টেবিলের সাথে সংযুক্ত থাকে যার নাম মডেলের প্লুরাল ফর্ম।
ডিফল্ট নিয়ম:
- মডেল:
Post
- টেবিল:
posts
- মডেল:
Category
- টেবিল:
categories
কাস্টম টেবিল ব্যবহার:
আপনি $table
প্রপার্টি ব্যবহার করে কাস্টম টেবিলের নাম সেট করতে পারেন।
class Post extends Model
{
protected $table = 'blog_posts';
}
২. প্রাইমারি কী (Primary Key)
Eloquent ডিফল্টভাবে ধরে নেয় যে টেবিলের প্রাইমারি কী হলো id
।
কাস্টম প্রাইমারি কী ব্যবহার:
আপনি $primaryKey
প্রোপার্টি দিয়ে প্রাইমারি কী কাস্টমাইজ করতে পারেন।
class Post extends Model
{
protected $primaryKey = 'post_id';
}
অটো-ইনক্রিমেন্ট এবং নন-ইনক্রিমেন্ট কী:
যদি প্রাইমারি কী ইনক্রিমেন্টাল না হয়, তাহলে $incrementing
প্রপার্টি false
করুন।
class Post extends Model
{
protected $primaryKey = 'uuid';
public $incrementing = false;
}
৩. টাইমস্ট্যাম্প কলাম (Timestamps)
Laravel স্বয়ংক্রিয়ভাবে created_at
এবং updated_at
কলাম পরিচালনা করে।
টাইমস্ট্যাম্প বন্ধ করতে:
class Post extends Model
{
public $timestamps = false;
}
কাস্টম টাইমস্ট্যাম্প কলামের নাম:
class Post extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
৪. ফিলেবল এবং গার্ডেড ফিল্ডস (Mass Assignment)
ডিফল্টভাবে, Laravel mass assignment প্রটেকশন দেয়।
$fillable:
$fillable
নির্ধারণ করে কোন ফিল্ডে mass assignment অনুমতি দেওয়া হবে।
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
$guarded:
$guarded
নির্ধারণ করে কোন ফিল্ডগুলোতে mass assignment নিষিদ্ধ।
class Post extends Model
{
protected $guarded = ['id'];
}
৫. সম্পর্ক (Relationships)
Eloquent সম্পর্ক ব্যবহারের জন্য কিছু ডিফল্ট কনভেনশন রয়েছে।
One-to-One Relationship:
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
One-to-Many Relationship:
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
Many-to-Many Relationship:
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}
৬. টেবিলের ডিফল্ট নামকরণ (Pivot Table)
Many-to-Many সম্পর্কের ক্ষেত্রে Laravel ডিফল্টভাবে টেবিলের নাম তৈরি করে দুই মডেলের নামের অ্যালফাবেটিক ক্রমানুসারে।
ডিফল্ট টেবিল নাম:
post_tag
(যদি মডেল Post
এবং Tag
হয়)।
কাস্টম পিভট টেবিল নাম:
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class, 'custom_pivot_table');
}
}
৭. মডেল ইভেন্টস (Model Events)
Eloquent মডেল বিভিন্ন ইভেন্ট (যেমন: creating
, updating
, deleting
) ট্রিগার করতে পারে।
class Post extends Model
{
protected static function booted()
{
static::creating(function ($post) {
$post->slug = Str::slug($post->title);
});
}
}
৮. কাস্টম ক্যাশিং কনভেনশন (Global Scopes)
কোনো মডেলে গ্লোবাল স্কোপ যুক্ত করা যায়।
class Post extends Model
{
protected static function booted()
{
static::addGlobalScope('published', function ($query) {
$query->where('status', 'published');
});
}
}
Top comments (0)