آموزش برنامه نویسی - تاپ دمی

بررسی کامل Cast ها در لاراول

ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 3 دقیقه
بررسی کامل Cast ها در لاراول

در برنامه های لاراولی ما میتوانیم اطلاعات دریافتی از دیتابیس را به فرمت دلخواه نمایش بدیم و یا به فرمت خاصی ارسال کنیم ، برای اینکار باید از 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 سطح زبان برنامه نویسی خود را افزایش دهید.

امیدوارم که این مقاله آموزشی برای شما مفید باشد.

این مقاله برای شما چقدر مفید بود ؟

18 شهریور، 1400

اشتراک گزاری مقاله

مقالات مشابه

آموزش controller در لاراول

آموزش controller در لاراول

در این مقاله به صورت کامل با نحوه پیاده سازی و کار با کنترل ها (controller) در لاراول آشنا...

ادامه مطلب
بهترین فریمورک‌های PHP

بهترین فریمورک‌های PHP

زبان برنامه نویسی php بیشترین استفاده را بین دیگر زبان های backend دارد که این موضوع باع...

ادامه مطلب
آموزش Routing در لاراول

آموزش Routing در لاراول

در این مقاله آموزش سعی کردیم به صورت کامل و جامع پیاده سازی روت در لاراول (routing) را برر...

ادامه مطلب