Изучение приведения моделей Laravel: методы и примеры кода

«Приведение моделей Laravel» относится к функции PHP-фреймворка Laravel, которая позволяет вам указывать тип данных определенных атрибутов ваших моделей Eloquent. Эта функция помогает автоматически преобразовывать значения атрибутов из базы данных в определенные типы данных при их извлечении и наоборот при их сохранении обратно в базу данных.

Вот некоторые методы, которые вы можете использовать для определения приведения моделей в Laravel, а также примеры кода:

Свойство

  1. $casts: приведения можно определить непосредственно в свойстве $castsмодели в виде массива, где ключами являются имена атрибутов и значения. — желаемые типы данных.
class User extends Model
{
    protected $casts = [
        'is_admin' => 'boolean',
        'age' => 'integer',
        'settings' => 'array',
    ];
}

В приведенном выше примере атрибут is_adminбудет автоматически преобразован в логическое значение, атрибут age— в целое число, а settingsатрибут массива.

    Метод

  1. castAs: вы также можете использовать метод castAsдля индивидуального указания типа данных атрибута.
class User extends Model
{
    protected $fillable = ['name', 'email', 'address'];
    protected $casts = [];
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->castAs('address', 'json');
    }
}

В этом примере атрибут addressбудет преобразован в формат JSON.

  1. Пользовательские классы приведения: Laravel позволяет вам определять ваши собственные классы приведения, что дает вам больше гибкости в обработке приведения атрибутов. Вы можете создать собственный класс приведения, реализовав интерфейс Illuminate\Contracts\Database\Eloquent\CastsAttributes.
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class JsonCast implements CastsAttributes
{
    public function get($model, $key, $value, $attributes)
    {
        return json_decode($value, true);
    }
    public function set($model, $key, $value, $attributes)
    {
        return json_encode($value);
    }
}
class User extends Model
{
    protected $casts = [
        'settings' => JsonCast::class,
    ];
}

В приведенном выше примере атрибут settingsбудет преобразован в формат JSON с использованием специального класса JsonCast.