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

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

لاراول

18 شهریور، 1400

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

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

توسعه دهنده وب

تقريبا ٩ سال از اولين سايتي كه طراحي كردم ميگذره ، این اشتیاق از آن زمان ادامه پیدا کرد که در نهایت من به عنوان یک توسعه دهنده وب مشغول به كار شدم. طي اين سال ها تجربه اي كه از شركت در پروژه ها و چالش هاي ياگيري برنامه نویسی بدست آوردم ، تصميم گرفتم كه اين تجربه رو با بقيه اشتراك بزارم كه نتیجه ی آن شد تاپ دمی.

مقالات مشابه