الکوئنت: سریال سازی
- معرفی
- سریالسازی مدلها و مجموعهها
- پنهان کردن ویژگی ها از JSON
- افزودن مقادیر به JSON
- سریال سازی تاریخ
معرفی
هنگام ساختن API های JSON، اغلب باید مدل ها و روابط خود را به آرایه ها یا JSON تبدیل کنید. Eloquent شامل روشهای راحت برای انجام این تبدیلها و همچنین کنترل ویژگیهایی است که در سریالسازیهای شما گنجانده شدهاند.
سریالسازی مدلها و مجموعهها
سریال سازی به آرایه ها
برای تبدیل یک مدل و
روابط
بارگذاری شده آن به یک آرایه، باید از
toArray
روش استفاده کنید.
این روش بازگشتی است، بنابراین تمام ویژگی ها و همه روابط (از جمله روابط
روابط) به آرایه تبدیل می شوند:
$user = App\User::with('roles')->first(); return $user->toArray();
برای تبدیل فقط ویژگی های یک مدل به آرایه، از
attributesToArray
روش زیر استفاده کنید:
$user = App\User::first(); return $user->attributesToArray();
همچنین می توانید کل مجموعه مدل ها را به آرایه تبدیل کنید:
$users = App\User::all(); return $users->toArray();
سریال سازی به JSON
برای تبدیل یک مدل به JSON، باید از
toJson
روش استفاده کنید.
مانند
toArray
،
toJson
روش بازگشتی است، بنابراین تمام ویژگی ها و روابط به JSON تبدیل می شوند.
همچنین میتوانید گزینههای کدگذاری JSON
که توسط PHP پشتیبانی میشوند
را مشخص کنید :
$user = App\User::find(1); return $user->toJson(); return $user->toJson(JSON_PRETTY_PRINT);
همچنین، میتوانید یک مدل یا مجموعه را به یک رشته ارسال کنید، که به طور
خودکار
toJson
متد را در مدل یا مجموعه فراخوانی میکند:
$user = App\User::find(1); return (string) $user;
از آنجایی که مدلها و مجموعهها هنگام فرستادن به رشته به JSON تبدیل میشوند، میتوانید اشیاء Eloquent را مستقیماً از مسیرها یا کنترلکنندههای برنامه خود برگردانید:
Route::get('users', function () { return App\User::all();});
روابط
هنگامی که یک مدل Eloquent به JSON تبدیل می شود، روابط بارگذاری شده آن به طور خودکار به عنوان ویژگی در شی JSON گنجانده می شود. همچنین، اگرچه روشهای ارتباط Eloquent با استفاده از "camel case" تعریف میشوند، ویژگی JSON یک رابطه، "snake case" خواهد بود.
پنهان کردن ویژگی ها از JSON
گاهی اوقات ممکن است بخواهید ویژگی هایی مانند رمزهای عبور را که در آرایه
مدل شما یا نمایش JSON گنجانده شده اند، محدود کنید.
برای انجام این کار، یک
$hidden
ویژگی به مدل خود اضافه کنید:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = ['password'];}
هنگام پنهان کردن روابط، از نام روش رابطه استفاده کنید.
از طرف دیگر، میتوانید از این
visible
ویژگی برای تعریف لیست سفیدی از ویژگیها استفاده کنید که باید در آرایه مدل
شما و نمایش JSON گنجانده شوند.
هنگامی که مدل به آرایه یا JSON تبدیل می شود، همه ویژگی های دیگر پنهان می
شوند:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be visible in arrays. * * @var array */ protected $visible = ['first_name', 'last_name'];}
تغییر موقت نمایان بودن ویژگی
اگر میخواهید برخی از ویژگیهای پنهان را در یک نمونه مدل مشخص نمایان
کنید، میتوانید از این
makeVisible
روش استفاده کنید.
این
makeVisible
روش نمونه مدل را برای زنجیره روش راحت برمی گرداند:
return $user->makeVisible('attribute')->toArray();
به همین ترتیب، اگر می خواهید برخی از ویژگی های معمولی قابل مشاهده را در
یک نمونه مدل مشخص پنهان کنید، می توانید از
makeHidden
روش استفاده کنید.
return $user->makeHidden('attribute')->toArray();
افزودن مقادیر به JSON
گاهی اوقات، هنگام ریختن مدل ها به آرایه یا JSON، ممکن است بخواهید ویژگی هایی را اضافه کنید که ستون مربوطه در پایگاه داده شما ندارند. برای انجام این کار، ابتدا یک Accessor برای مقدار تعریف کنید:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * Get the administrator flag for the user. * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] === 'yes'; }}
پس از ایجاد Accessor، نام ویژگی را به
appends
ویژگی روی مدل اضافه کنید.
توجه داشته باشید که نام ویژگیها معمولاً در "snake case" ارجاع میشوند،
حتی اگر Accessor با استفاده از "camel case" تعریف شود:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The accessors to append to the model's array form. * * @var array */ protected $appends = ['is_admin'];}
هنگامی که ویژگی به لیست اضافه شد
appends
، هم در آرایه مدل و هم در نمایش JSON گنجانده می شود.
ویژگی های موجود در
appends
آرایه نیز به تنظیمات
visible
و
hidden
تنظیمات پیکربندی شده روی مدل احترام می گذارند.
اضافه شدن در زمان اجرا
میتوانید به یک نمونه مدل دستور دهید تا با استفاده از
append
روش، ویژگیها را اضافه کند.
یا، میتوانید از این
setAppends
روش برای نادیده گرفتن کل آرایه ویژگیهای ضمیمه شده برای یک نمونه مدل
استفاده کنید:
return $user->append('is_admin')->toArray(); return $user->setAppends(['is_admin'])->toArray();
سریال سازی تاریخ
سفارشی کردن قالب پیشفرض تاریخ
میتوانید با نادیده گرفتن روش، قالب سریالسازی پیشفرض را سفارشی کنید
serializeDate
:
/** * Prepare a date for array / JSON serialization. * * @param \DateTimeInterface $date * @return string */protected function serializeDate(DateTimeInterface $date){ return $date->format('Y-m-d');}
سفارشی کردن قالب تاریخ برای هر ویژگی
میتوانید قالب سریالسازی ویژگیهای تاریخ Eloquent را با تعیین قالب تاریخ در بیانیه بازیگران سفارشی کنید :
protected $casts = [ 'birthday' => 'date:Y-m-d', 'joined_at' => 'datetime:Y-m-d H:00',];