novius/laravel-json-casted
Cast JSON columns in Laravel models with per-key casting. Define sub-key casts via a method or dedicated cast class; values are exposed as a Fluent object with proper types (e.g., Carbon dates). Supports PHP 8.2+ and Laravel 10+.
A package to cast json fields, each sub-keys is castable
You can install the package via composer:
composer require novius/laravel-json-casted
If you use laravel-ide-helper, add ModelHasJsonWithCastsHook in its configuration file :
'model_hooks' => [
// ...
\Novius\LaravelJsonCasted\Hooks\ModelHasJsonWithCastsHook::class,
],
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Novius\LaravelJsonCasted\Services\JsonCasted;
class Post extends Model {
protected $casts = [
'extras' => JsonCasted::class.':getExtrasCasts',
];
public function getExtrasCasts(): array
{
return [
'date' => 'date:Y-m-d',
];
}
}
namespace App\Casts;
use Novius\LaravelJsonCasted\Services\JsonCasted;
class Extras extends JsonCasted {
protected static array $casts = [
'date' => 'date:Y-m-d',
];
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Casts\Extras;
class Post extends Model {
protected $casts = [
'extras' => Extras::class,
];
}
$model = Post::first();
// $model->extras is now a Fluent instance
// $model->extras->date is a now Carbon class
$model->extras->date->lt(now());
Lint your code with Laravel Pint using:
composer run cs-fix
This package is under GNU Affero General Public License v3 or (at your option) any later version.
How can I help you explore Laravel packages today?