ایجاد فیلد‌های محاسبه شده در مدل‌های Laravel

در هنگام استفاده از اطلاعات ذخیره شده در پایگاه داده، ممکن است برخی از داده‌ها پیش از استفاده نیاز به پردازش یا محاسبات خاص داشته باشند.
برای مثال ممکن است بخواهیم نام کامل فرد که ترکیبی از «عنوان فرد»، «نام کوچک» و «نام خانوادگی» است در اختیار داشته باشیم.
یا ممکن است تاریخ تولد یک فرد را که به صورت میلادی در پایگاه داده ذخیره شده، به صورت شمسی دریافت کنیم.
یا ممکن است بخواهیم URL یک فایل را که تنها نام آن در بانک اطلاعاتی نگهداری می‌شود را به دست آوریم.
در تمامی موارد بالا و موارد مشابه، فیلدهای محاسباتی یکی از بهترین روش‌ها برای دستیابی به هدف هستند.
پیاده‌سازی فیلدهای محاسباتی در Eloquent به سادگی امکان‌پذیر است.

برای این منظور کافی است تا به ازای هر فیلد، یک تابع با پیشوند get و پسوند Attribute درون مدل ایجاد کنیم. نام فیلد محاسباتی جدید نیز باید به صورت CamelCase میان پیشوند و پسوند قرار بگیرد. برای نمونه یک فیلد محاسباتی با نام full_name به صورت زیر تعریف می‌گردد:

<?php
public function getFullNameAttribute() {
	return "{$this->title} {$this->fname} {$this->lname}";
}
?>

با تعریف این تابع جدید، دسترسی به نام کامل کاربر به شکل زیر ممکن خواهد بود:

<?php
echo $user->full_name;
?>

لاراول به صورت پیش‌فرض محاسبه‌ی مقدار این فیلد را به صورت Lazy Load به انجام می‌رساند و چنانچه بخواهید مجموعه‌ای از رکوردها را به صورت آرایه یا JSON ایجاد کنید، دسترسی به مقدار این فیلد ناممکن خواهد بود.

برای اینکه Eloquent مقدار این فیلد جدید را به همراه آرایه‌ها و JSON، محاسبه کند، می‌بایست داخل مدل این دستور را به صورت صریح درج کنید.

<?php
protected $appends = array( 'full_name' );
?>

از این پس محاسبه و درج مقدار فیلد محاسباتی در خروجی‌های آرایه و JSON نیز به صورت خودکار انجام خواهد شد. فراموش نکنید که انجام این کار ممکن است بار اضافی و ناخواسته به سیستم وارد کند و بهتر است تا زمانی که به آن نیازی نیست از محاسبه‌ی خودکار دوری شود.

این نوشته در برنامه‌نویسی, عمومی, لاراول, پایگاه داده ارسال و , , برچسب شده است. افزودن پیوند یکتا به علاقه‌مندی‌ها.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>