در برنامه های لاراولی ما میتوانیم اطلاعات دریافتی از دیتابیس را به فرمت دلخواه نمایش بدیم و یا به فرمت خاصی ارسال کنیم ، برای اینکار باید از 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
- ساخت فروشگاه اینترنتی با html ، css و bootstrap - بخش اول
- آموزش نصب ، راه اندازی و کامپایل sass
- میانبر های مفید ادیتور VSCode
- سوالات مصاحبه ای از php و لاراول
این مقاله چقدر مفید بود ؟