Laravel Eloquent ORM در Bangla Part-2 (روشنهای مدل Eloquent)

لاراول Eloquent کنوانسیون های مدل مجموعه ای از قوانین یا قوانین پیش فرض است که بین مدل ها و جداول پایگاه داده ارتباط ایجاد می کند. پایبندی به این قراردادها میزان کد نوشته شده را کاهش می دهد و توسعه را آسان تر می کند. با این حال، در صورت تمایل می توانید این قراردادهای پیش فرض را سفارشی کرده و از آنها استفاده کنید.
قوانین مدل لاراول Eloquent
1. نام جدول (نام جدول)
بهطور پیشفرض، مدلهای Eloquent با جدولی به نام اشکال جمع مدلها مرتبط هستند.
قوانین پیش فرض:
- مدل:
Post
- جدول:
posts
- مدل:
Category
- جدول:
categories
استفاده از جداول سفارشی:
شما $table
شما می توانید نام جدول سفارشی را با استفاده از ویژگی ها تنظیم کنید.
class Post extends Model
{
protected $table = 'blog_posts';
}
2. کلید اصلی
Eloquent به طور پیش فرض فرض می کند که جدول کلید اصلی است id
.
استفاده از کلیدهای اصلی سفارشی:
شما $primaryKey
می توانید کلید اصلی را با ویژگی ها سفارشی کنید.
class Post extends Model
{
protected $primaryKey = 'post_id';
}
کلیدهای افزایش خودکار و غیر افزایشی:
اگر کلید اصلی افزایشی نیست، پس $incrementing
دارایی false
انجام دهید
class Post extends Model
{
protected $primaryKey = 'uuid';
public $incrementing = false;
}
3. ستون مهر زمان (مهر زمانی)
لاراول به صورت خودکار 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';
}
4. زمین های پر کردنی و محافظت شده (تخصیص انبوه)
به طور پیش فرض، لاراول حفاظت از انتساب انبوه را فراهم می کند.
$fillable:
$fillable
تعیین می کند که انتساب انبوه کدام فیلدها مجاز خواهد بود.
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
$guarded:
$guarded
تعیین می کند که اختصاص انبوه کدام فیلدها ممنوع است.
class Post extends Model
{
protected $guarded = ['id'];
}
5. روابط
Eloquent چند قرارداد پیش فرض برای استفاده از روابط دارد.
رابطه یک به یک:
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
رابطه یک به چند:
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
رابطه چند به چند:
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}
6. نام جدول پیشفرض (جدول محوری)
در روابط چند به چند، لاراول به طور پیش فرض نام جدول را به ترتیب حروف الفبای نام دو مدل ایجاد می کند.
نام جدول پیش فرض:
post_tag
(اگر مدل Post
و Tag
است).
نام جدول محوری سفارشی:
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class, 'custom_pivot_table');
}
}
7. رویدادهای مدل
فصیح وقایع مختلف را الگوبرداری می کند (به عنوان مثال: creating
، updating
، deleting
) می تواند باعث شود.
class Post extends Model
{
protected static function booted()
{
static::creating(function ($post) {
$post->slug = Str::slug($post->title);
});
}
}
8. کنوانسیون نقدینگی سفارشی (گستره جهانی)
یک دامنه جهانی را می توان به یک مدل اضافه کرد.
class Post extends Model
{
protected static function booted()
{
static::addGlobalScope('published', function ($query) {
$query->where('status', 'published');
});
}
}