如何在Eloquent中定义和使用JSON数据类型?

43

我该如何在 Laravel 5 中定义 pgsql 9.4 提供的 JSON 数据类型?

我需要定义数据类型,并存储和获取数据,但迄今为止还没有找到在 Laravel 5.1 中处理它的方法。


http://laravel.io/forum/01-19-2015-eloquent-postgres-and-the-json-datatype?page=1 - Rwd
3个回答

104

在你的迁移中,你可以做如下操作:

$table->json('field_name');

在您的模型中,您需要将该字段添加到$casts属性中,以指示Eloquent将其从JSON反序列化为PHP数组:

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

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

注意:这也适用于 Laravel 5.6。


$table->json('field_name');
这个在 Laravel 5.1 中可用吗?
- Volatil3
太棒了。我忽略了那个。为了使用PostgreSQL的JSON相关查询,我需要使用原始查询吗? - Volatil3
不知道,但如果你想查询这些值,我不建议将数据存储在json中。 - Helder Lucas
1
今天检查了一下,你也可以在Select中查询JSON数据。PgSQL原生支持它。 - Volatil3
MySQL中没有数据类型字段。我们需要在MySQL中使用JSON类型字段吗?还是Laravel会自动处理? - Abid Hussain
Laravel会自动处理它。很可能会将其设置为TEXT类型字段。 - Helder Lucas

11

7
你说得对,应该使用数组(array),但不幸的是,“JSON”确实可以工作。这本不应该被允许,因为它鼓励了casts属性的错误使用,该属性存在于描述想将其转换为什么类型。说我要将一个JSON字段转换为JSON是荒谬的,但很多人正在使用它。这反映了人们普遍对JSON的误解,我已经看到过很多次PHP数组变量被称为$ jsonSomething。JSON只是一个字符串!永远都是,它是一种表示法而不是对象或数组。 - Martin Joiner
我使用 $jsonSomething 来表示该字符串应该是可解析的 JSON 字符串。 - Vladimir Hidalgo

2

将对象转换为JSON格式

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

将数组转换为JSON
 class YourModel extends Model
{
    protected $casts = [
        'table_column_name' => 'array'
    ];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接