How to define and use JSON data type in Eloquent?

According to Laravel documentation, 'json' is not one of the casting available types. https://laravel.com/docs/5.1/eloquent-mutators

You should use 'array' instead:

class SomeModel extends Model
    {
        protected $casts = [
            'field_name' => 'array'
        ];
    }

For Object to JSON casting

class YourModel extends Model
{
    protected $casts = [
        'table_column_name' => 'object'
    ];
}

For Array to JSON casting

 class YourModel extends Model
{
    protected $casts = [
        'table_column_name' => 'array'
    ];
}

In your migrations you can do something like:

$table->json('field_name');

And in your model you add the field to the $casts property to instruct Eloquent to deserialize it from JSON into a PHP array:

class SomeModel extends Model
{
    protected $casts = [
        'field_name' => 'array'
    ];
}

Source: https://laravel.com/docs/5.1/eloquent-mutators#attribute-casting

Note: This is also relevant answer for Laravel 5.6