TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #325 251
فصل چهار - مدل‌ها و Eloquent ORM

بخش ششم - Casts


کست یک ویژگی در مدل‌های لاراول است که به شما امکان می‌دهد نوع داده‌ای که از ستون‌های دیتابیس بازیابی می‌شود یا به دیتابیس ذخیره می‌شود را خودکار مدیریت کنید. لاراول از Casts برای تبدیل داده‌ها به نوع‌های مختلف استفاده می‌کند تا توسعه‌دهندگان بدون نیاز به نوشتن کد اضافی، نوع داده موردنظر خود را مدیریت کنند.

برای تعریف Castهای پیش‌فرض، متد casts() را در مدل خود پیاده‌سازی می‌کنید.
protected function casts(): array
{
return [
'is_active' => 'boolean',
'birthday' => 'date',
];
}

این کست ها باعث می شود داده به طور خودکار به فرمت یا نوع مشخص شده تبدیل شوند، به عنوان مثال اگر فیلد is_active برابر 0 باشد به واسطه کست ها به false تبدیل می شود.

در لاراول، چندین نوع Cast پیش‌فرض وجود دارد که به شما امکان می‌دهد داده‌ها را به صورت خودکار به نوع‌های مختلف تبدیل کنید. در زیر لیست این Castها آورده شده است:
'is_active' => 'boolean',
'age' => 'integer',
'price' => 'float',
'phone_number' => 'string',
'meta' => 'array',
'preferences' => 'json',
'settings' => 'object',
'tags' => 'collection',
'birthday' => 'date',
'created_at' => 'datetime',
'event_time' => 'timestamp',
'birthday' => 'immutable_date',
'created_at' => 'immutable_datetime',
'password' => 'encrypted',


علاوه بر Castهای پیش‌فرض، لاراول این امکان را به شما می‌دهد تا Casts سفارشی بسازید. این Castها به شما اجازه می‌دهند که تبدیل‌های پیچیده‌تری برای داده‌ها اعمال کنید.

برای ساخت یک Cast سفارشی، ابتدا باید یک کلاس ایجاد کنید که قرارداد (interface) CastsAttributes را پیاده‌سازی کند. این کلاس باید دو متد get() و set() را پیاده‌سازی کند.
برای این کار می توانید از دستور زیر استفاده کنید:
php artisan make:cast Uppercase


این کامند یک کلاس برای کست سفارشی شما ایجاد می کنید و شما می توانید متد ها آن را پیاده سازی کنید:
class Uppercase implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes)
{
return strtoupper($value);
}

public function set($model, string $key, $value, array $attributes)
{
return strtolower($value);
}
}


درصورتی که یک فیلد را از دیتابیس فراخوانی کنیم و کست Uppercase ما روی آن اعمال شده باشد متد get اجرا خواهد شد و درصورت دخیره در یک فیلد دیتابیس دارای کست Uppercase متد set اجرا خواهد شد.

توضیح ورودی های متد set و متد get:

1- پارامتر model:
این پارامتر یک شیء مدل را شامل می‌شود که نشان‌دهنده مدل فعلی است که در حال تعامل با آن هستید. این پارامتر به شما اجازه می‌دهد به ویژگی‌های مدل دسترسی داشته باشید.

2- پارامتر key:
این پارامتر نام ویژگی (attribute)‌ای است که Cast برای آن تعریف شده است. با این پارامتر، می‌توانید بدانید که کدام فیلد از مدل در حال پردازش است.

3- پارامتر value:
این پارامتر مقدار فعلی ویژگی (attribute) را شامل می‌شود. هنگام استفاده از get()، مقدار بازیابی‌شده از دیتابیس در این پارامتر قرار دارد و در set()، مقدار جدیدی که کاربر برای آن ویژگی تنظیم کرده است.

4- پارامتر attributes:
این پارامتر آرایه‌ای شامل همه ویژگی‌های مدل و مقادیر آن‌ها است. این پارامتر به شما امکان می‌دهد به سایر ویژگی‌های مدل دسترسی پیدا کنید و بر اساس مقادیر آن‌ها تغییراتی ایجاد کنید.

پس از تعریف Cast سفارشی، شما می‌توانید آن را در متد casts() مدل خود استفاده کنید.
protected function casts(): array
{
return [
'name' => Uppercase::class,
];
}


نکته: در نسخه 10 به قبل کست ها به جای متد در یک پراپرتی ثبت میشوند:
protected $casts = [
'is_admin' => 'boolean',
];


▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.
  • 👍 1
  • 🔥 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →