خلاصه :

اکسسور امکانی است که مقادیر را بعد از خوانده شدن از دیتابیس و قبل از نمایش به کاربر دچار تغییر می کنند. به صورت getXXXXAttribute در مدل مربوطه فراخوانی می شوند.

میوتیتورز امکانی است که مقادیر دریافتی را قبل از ثبت در دیتابیس دچار تغییر می کند. به صورت setXXXXXAttribute($value) فراخوانی می شوند. (مشاهده فیلم آموزشی از آپارات)

 

کاربردهای Mutators ها 

  •  کار با JSON در لاراول

ساختار جیسونی که مورد قبول لاراول است (البته همه جور جیسون در لاراول قابل استفاده است ولی مطابق رسومات لاراول، ساده ترین آنها بهترین آنها است) :

{"name":"بانک ملی ایران","cart":6037994168737319,"account":12456546535}

برای ذخیره سازی، ایجاد تغییرات و مشاهده اطلاعاتی که شبیه به ساختار فوق در یک ستون دیتابیس ذخیره شده است فقط کافیست در Model مربوط متغییر پرایوت زیر را تعریف کنید :

protected $casts = [
    'bank' => 'array',      // Account, Cart, Name, ...
    'address' => 'array',   // Address, Post Code, No, ...
    'house'   => 'array',   // House Type, House Quality, ...
];

 

در واقع در لاراول قابلیتی به نام Cast وجود دارد که نوع داده ها را مدیریت می کند. این قابلیت فوق العاده می تواند به راحتی انواع داده خروجی از دیتابیس را به یک آرایه تبدیل کند و تمامی روند دیکد و انکد کردن خروجی های JSON را حذف کند.

دو نکته :

1- برای ذخیره داده ها به صورت JSON در یک ستون از دیتابیس به راحتی کافیست فیلدهایی که در یک ستون قرار می گیرند را به صورت زیر نام گزاری کنید :

<input type="text" name="bank[name]">
<input type="number" name="bank[cart]">
<input type="number" name="bank[account]">

در صورتی که Cast را درست تعریف کرده باشید داده ها به این صورت در دیتابیس ذخیره خواهند شد :

---------------------------------------
|  id   |             bank            |
---------------------------------------
|   1   |{"name":"value","cart":"..."}|
---------------------------------------

برای خواندن دیتاها هم به همین راحتی فقط نیاز است که متغییر ارسالی به ویو را به این صورت فراخوانی کنید :

{{ $record->bank['name'] }}