استفاده از Accessors و Mutators در لاراول

/ مرداد ۲۶, ۱۳۹۶ / بدون دیدگاه / در آموزش - دسته‌بندی نشده - لاراول / توسط

یکی از ویژگی های جالب مدل های لاراول وجود دو امکان به نام های Accessors و Mutators است . به وسیله Accessors می تونید ویژگی های جدید برای یک مدلتون ایجاد کنید یا ویژگی هایی که از قبل در مدلتون وجود داره را به نحوه دلخواه نمایش بدید . به کمک ویژگی Mutators می تونید در زمان ذخیره یک مدل روی مقدار اون تغییراتی رو اعمال کنید . در اینجا برای هرکدوم از این ورژگی ها یک مثال آورده شده تا درک بهتری از این ویژگی ها پیدا کنید .

Accessor

همان طور که گفته شد به وسیله Accessors ها می تونید ویژگی که از قبل در یک مدل وجود داره رو به نحوه خاص تغییر بدید یا ویژگی جدید به مدل اضافه کنید . برای مثال در نظر بگیرید که مدلی مثل user دارید . این مدل ۲ ویژگی firstname و lastname داره . برای اینکه نام کاربر رو به صورت کامل داشته باشیم ما به دنبال چیزی شبه user->full_name$ که در همه جا در دسترس داشته باشیم.

راه معمول

{{ $user->first_name . ' ' . $user->last_name }

راه بهتر

 
 {{ $user->full_name }}

سپس ویزگی fullname به وسیله Accessors به این مدل اضافه می کنیم.

public function getFullNameAttribute()
 {
 return $this->first_name . " " . $this->last_name;
 }

در نام گذاری Accessors ها دقت داشته باشید که باید از الگوری ()get[attribute_name]Attribute استفاده کنید .

نکته مهم در استفاده از Accessors در این است که در ایجاد کئوری های مختلف نمی توانید از دستورات معمول استفاده کنید . زیرا ویژگی Accessors از دیتابیس به وجود نمی اید و ویژگی است که در پشت صفحه خود ما آن را ایجاد کرده ایم . پس باید از دستورات مربوط به collection استفاده کنید و نه دستورات eloquent queries

به عنوان نمونه فرض کنید می خواهید لیست کاربران را براساس نام کامل آنها مرتب کنید . مطمئنا دستور زیر کار نخواهد کرد :

$users = User::orderBy('full_name')->get();

اما به راحتی می تواند از sortBy استفاده کنید :

 $users = User::all()->sortBy('full_name');

توجه داشته باشید که از دستور sortByDesc نیز می توانید استفاده کنید

Mutators

به کمک Mutators می توانید یک ویژگی را قبل از ذخیره در دیتابیس تغییر دهید .  مثلا فرض کنید می خواهید نام کمپانی ها قبل از ذخیر شدن به حروف بزرگ تبدیل شود .مشابه قبل در مدل آن می توانید تابع زیر را ایجاد نمایید.

public function setCompanyNameAttribute($value)
 {
 $this->attributes['company_name'] = strtoupper($value);
 }

حال با فراخوانی دستور زیر :

$user->company_name = Input::get('company');

$user->save();

نام هر کمپانی به صورت حروف بزرگ ذخیره خواهد شد .

مشابه قبل روش نامگذاری Mutators ها نیز ار قائده خاصی مشابه این مثال پیروی می کند .

نوشته های مرتبط

ارسال دیدگاه

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