در برنامه های لاراولی ما میتوانیم اطلاعات دریافتی از دیتابیس را به فرمت دلخواه نمایش بدیم و یا به فرمت خاصی ارسال کنیم ، برای اینکار باید از Cast ها در لاراول استفاده کنیم. لاراول از cast های زیر پشتیبانی میکند:
- array
- boolean
- collection
- date
- datetime
- jummtable_date
- jummtable_datetime
- decimal
- double
- encrypted
- encrypted:array
- encrypted:object
- float
- object
- real
- string
- timestamp
به عنوان مثال فرض کنید داخل دیتابیس یک فیلد از نوع JSON داریم و میخواهیم لیست دوستان کاربر را در آن ذخیره کنیم برای این کار کافی است از قابلیت cast استفاده کنیم.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'friends' => 'array',
];
}
حالا با دریافت دوستان کاربر و ذخیره آن به صورت خودکار آرایه دریافتی را به json تبدیل می کند و در دیتابیس ذخیره میشود و همچنین برای نمایش لیست دوستان کاربر json دریافتی از دیتابیس را تبدیل به آرایه میکند.
use App\Models\User;
$user = User::find(1);
$friends = $user->friends;
$Friends['key'] = 'value';
$user->friends = $friends;
$user->save();
دیدید که کار با cast ها خیلی راحته و فقط کافیست که اون cast که میخوایم را داخل مدل مربوط تعریف کنیم.
حالا فرض کنید که شما نیاز دارید که از یک نوع دیگری استفاده کنید و لیست cast های تعریف شده در خود لاراول نیاز شمارا برطرف نمیکنه ، خوب برای این کار کافیه که خودمون به صورت اختصاصی اون cast که نیاز داریم را تعریف کنیم برای این کار با دستور
php artisan make:cast custom
داخل پوشه app برای شما پوشه ای با نام casts ساخته میشود و فایلی با نامی که داخل دستور وارد کردید.
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class custom implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return string
*/
public function set($model, $key, $value, $attributes)
{
return json_encode($value);
}
}
همانطور که می بینید دو متد داریم get و set که به ترتیب برای تبدیل اطلاعات گرفته شده از دیتابیس و نمایش آنها و بعدی برای تبدیل اطلاعات و ذخیره آنها در دیتابیس است.
بعد از تغییرات دلخواه شماباید cast ساخته شده را در مدل ثبت کنید.
<?php
namespace App\Models;
use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'friends' => custom::class,
];
}
بعد از انجام این کار مثل قبل لیست دوستان کاربر به صورت خودکار برای ذخیره و نمایش ، تبدیل میشوند و نیاز به کار خاصی نیست.
پاس دادن پارامتر به cast ها
برای ارسال پارامتر به cast باید به شکل زیر هنگام ثبت cast در مدل عمل کنیم:
protected $casts = [
'friends' => custom::class.':22,
];
و سپس در متد construct__ پارامتر ارسالی قابل دریافت میباشد.
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class custom implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function __construct($age)
{
$this->age = $age;
}
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return string
*/
public function set($model, $key, $value, $attributes)
{
return json_encode($value);
}
}
همچنین شما می توانید با شرکت در دوره آموزش پروژه محور nuxt و laravel سطح زبان برنامه نویسی خود را افزایش دهید.
امیدوارم که این مقاله آموزشی برای شما مفید باشد.
- آموزش ساخت صفحه ی وب سایت با استفاده از HTML و css
- همه ی آنچه باید در مورد Nuxt js بدانیم
- میانبر های مفید ادیتور VSCode
- سوالات مصاحبه ای از php و لاراول
- نحوی انتخاب عناصر یا Selector ها در CSS
این مقاله چقدر مفید بود ؟