الکوئنت: دگرسان
معرفی
هنگام بازیابی یا تنظیم مقادیر مشخصه Eloquent در نمونههای مدل، ابزارهای دسترسی و جهشدهندهها به شما امکان میدهند که آنها را قالببندی کنید. به عنوان مثال، ممکن است بخواهید از رمزگذار لاراول برای رمزگذاری یک مقدار در زمانی که در پایگاه داده ذخیره می شود، استفاده کنید، و سپس زمانی که به آن در مدل Eloquent دسترسی پیدا می کنید، ویژگی را به طور خودکار رمزگشایی کنید.
علاوه بر دسترسیها و جهشدهندههای سفارشی، Eloquent همچنین میتواند فیلدهای تاریخ را بهطور خودکار به نمونههای Carbon ارسال کند یا حتی فیلدهای متنی را به JSON ارسال کند .
لوازم جانبی و تغییردهنده ها
تعریف اکسسوری
برای تعریف یک Accessor،
getFooAttribute
روشی را در مدل خود ایجاد کنید که در آن
Foo
نام ستونی که میخواهید به آن دسترسی داشته باشید، به صورت "مطالعهای" باشد. در این مثال، یک Accessor برای ویژگی تعریف می کنیم
first_name
. هنگام تلاش برای بازیابی مقدار مشخصه، Accessor به طور خودکار توسط Eloquent فراخوانی می شود
first_name
:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * Get the user's first name. * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); }}
همانطور که می بینید، مقدار اصلی ستون به Accessor ارسال می شود و به شما امکان می دهد مقدار را دستکاری و برگردانید. برای دسترسی به مقدار Accessor، می توانید به
first_name
ویژگی در یک نمونه مدل دسترسی داشته باشید:
$user = App\User::find(1); $firstName = $user->first_name;
همچنین می توانید از Accessor ها برای برگرداندن مقادیر جدید و محاسبه شده از ویژگی های موجود استفاده کنید:
/** * Get the user's full name. * * @return string */public function getFullNameAttribute(){ return "{$this->first_name} {$this->last_name}";}
اگر می خواهید این مقادیر محاسبه شده به آرایه / نمایش JSON مدل شما اضافه شود، باید آنها را اضافه کنید .
تعریف جهش دهنده
برای تعریف یک mutator،
setFooAttribute
روشی را در مدل خود تعریف کنید که در آن
Foo
نام ستونی که می خواهید به آن دسترسی داشته باشید، با حروف "مطالعه ای" باشد. بنابراین، دوباره، اجازه دهید یک mutator برای
first_name
ویژگی تعریف کنیم. زمانی که بخواهیم مقدار
first_name
ویژگی را در مدل تنظیم کنیم، این جهشدهنده بهطور خودکار فراخوانی میشود:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * Set the user's first name. * * @param string $value * @return void */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); }}
جهشدهنده مقداری را که روی ویژگی تنظیم میشود، دریافت میکند و به شما امکان میدهد مقدار را دستکاری کنید و مقدار دستکاری شده را روی ویژگی داخلی مدل Eloquent تنظیم کنید
$attributes
. بنابراین، برای مثال، اگر بخواهیم
first_name
ویژگی را روی
Sally
:
$user = App\User::find(1); $user->first_name = 'Sally';
در این مثال،
setFirstNameAttribute
تابع با مقدار فراخوانی می شود
Sally
. سپس mutator
strtolower
تابع را به نام اعمال می کند و مقدار حاصل از آن را در
$attributes
آرایه داخلی تنظیم می کند.
جهش دهندگان تاریخ
created_at
به طور پیشفرض، Eloquent ستونهای و
updated_at
را به نمونههایی از
کربن
تبدیل میکند
که
DateTime
کلاس PHP را گسترش میدهد و مجموعهای از روشهای مفید را ارائه میدهد. می توانید با تنظیم
$dates
ویژگی مدل خود، ویژگی های تاریخ دیگری را اضافه کنید:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = [ 'seen_at', ];}
میتوانید با تنظیم ویژگی عمومی مدل خود، مهرهای پیشفرض
created_at
و زمانی را غیرفعال کنید .updated_at
$timestamps
false
هنگامی که یک ستون به عنوان تاریخ در نظر گرفته می شود، می توانید مقدار آن را روی مهر زمانی یونیکس، رشته تاریخ (
Y-m-d
)، رشته تاریخ-زمان یا یک نمونه
DateTime
/ تنظیم کنید
Carbon
. مقدار تاریخ به درستی تبدیل و در پایگاه داده شما ذخیره می شود:
$user = App\User::find(1); $user->deleted_at = now(); $user->save();
همانطور که در بالا ذکر شد، هنگام بازیابی ویژگیهایی که در دارایی شما فهرست شدهاند ، به طور خودکار به نمونههای
کربن
$dates
فرستاده میشوند
و به شما امکان میدهند از هر یک از روشهای کربن در ویژگیهای خود استفاده کنید:
$user = App\User::find(1); return $user->deleted_at->getTimestamp();
فرمت های تاریخ
به طور پیش فرض، مُهرهای زمانی به صورت قالب بندی می شوند
'Y-m-d H:i:s'
. اگر نیاز به سفارشی کردن قالب زمان دارید،
$dateFormat
ویژگی را روی مدل خود تنظیم کنید. این ویژگی نحوه ذخیره ویژگی های تاریخ در پایگاه داده و همچنین فرمت آنها را در زمانی که مدل به صورت سریالی در یک آرایه یا JSON ذخیره می شود، تعیین می کند:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model{ /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U';}
ویژگی ریخته گری
ویژگی
$casts
موجود در مدل شما روش مناسبی برای تبدیل ویژگی ها به انواع داده های رایج ارائه می دهد. ویژگی
$casts
باید آرایهای باشد که در آن کلید، نام مشخصهای است که در حال فرستادن است و مقدار، نوعی است که میخواهید ستون را به آن ارسال کنید. انواع بازیگران پشتیبانی شده عبارتند از:
integer
,
real
,
float
,
double
,
decimal:<digits>
,
string
,
boolean
,
object
,
array
,
collection
,
date
,
datetime
, و
timestamp
. هنگام ارسال به
decimal
، باید تعداد ارقام (
decimal:2
) را مشخص کنید.
برای نشان دادن ریختن ویژگی، اجازه دهید
is_admin
ویژگی را که در پایگاه داده ما به عنوان یک عدد صحیح (
0
یا
1
) ذخیره میشود به یک مقدار بولی تبدیل کنیم:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'is_admin' => 'boolean', ];}
اکنون
is_admin
مشخصه همیشه هنگام دسترسی به آن به یک Boolean فرستاده می شود، حتی اگر مقدار اساسی در پایگاه داده به عنوان یک عدد صحیح ذخیره شود:
$user = App\User::find(1); if ($user->is_admin) { //}
ارسال آرایه و JSON
نوع ریخته
array
گری به ویژه هنگام کار با ستون هایی که به صورت سریال JSON ذخیره می شوند مفید است. به عنوان مثال، اگر پایگاه داده شما دارای یک
JSON
یا
TEXT
نوع فیلد است که حاوی JSON سریالی است، افزودن
array
cast به آن مشخصه، هنگامی که در مدل Eloquent خود به آن دسترسی پیدا میکنید، به طور خودکار ویژگی را به یک آرایه PHP از فهرست خارج میکند:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'options' => 'array', ];}
هنگامی که cast تعریف شد، می توانید به
options
ویژگی دسترسی داشته باشید و به طور خودکار از JSON به یک آرایه PHP تبدیل می شود. وقتی مقدار مشخصه را تنظیم می کنید
options
، آرایه داده شده به طور خودکار برای ذخیره سازی به JSON تبدیل می شود:
$user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user->options = $options; $user->save();
ریخته گری تاریخ
هنگام استفاده از نوع
date
یا
datetime
cast، می توانید قالب تاریخ را مشخص کنید. این قالب زمانی استفاده خواهد شد که
مدل به یک آرایه یا JSON سریال شود
:
/** * The attributes that should be cast to native types. * * @var array */protected $casts = [ 'created_at' => 'datetime:Y-m-d',];