Вы не можете напрямую указывать кастомные хелперы вроде 'username' => 'encrypt_data()' внутри массива $casts в Laravel. Свойство $casts в Laravel принимает только встроенные типы (такие как 'encrypted') или классы, реализующие интерфейс CastsAttributes.

Тем не менее, вы можете добиться нужного результата одним из следующих двух чистых способов:

Способ 1: Использование кастомного класса Cast (рекомендуемый и переиспользуемый)
Вы можете создать кастомный класс Cast для обёртки ваших хелперов:

Создайте класс Cast по пути  app/Casts/CustomEncrypt.php :

 <?php

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;

class CustomEncrypt implements CastsAttributes
{
    public function get(Model $model, string $key, mixed $value, array $attributes): mixed
    {
        return decrypt_data($value);
    }

    public function set(Model $model, string $key, mixed $value, array $attributes): mixed
    {
        return encrypt_data($value);
    }
}

 

Используйте его в приведении типов внутри  Credential.php :

 use App\Casts\CustomEncrypt;

protected $casts = [
    'username' => CustomEncrypt::class,
    'password' => CustomEncrypt::class,
    'link' => CustomEncrypt::class,
];

 

Способ 2: Использование аксессоров и мутаторов Eloquent (без дополнительных файлов)

 use Illuminate\Database\Eloquent\Casts\Attribute;

protected function username(): Attribute
{
    return Attribute::make(
        get: fn ($value) => decrypt_data($value),
        set: fn ($value) => encrypt_data($value),
    );
}

protected function password(): Attribute
{
    return Attribute::make(
        get: fn ($value) => decrypt_data($value),
        set: fn ($value) => encrypt_data($value),
    );
}

protected function link(): Attribute
{
    return Attribute::make(
        get: fn ($value) => decrypt_data($value),
        set: fn ($value) => encrypt_data($value),
    );
}