نسخه:

الکوئنت: سریال سازی

معرفی

هنگام ساختن 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',
];