Laravel插入和更新到JSON无法正常工作

时间:2018-09-30 16:29:20

标签: laravel laravel-5

无法弄清为什么忽略JSON字段。

这不起作用:

Registries::create([
    'nr' => $old_document->no,
    'metas->name' => 'r01',
]);

在模型中我已设置:

protected $casts = [
        'metas' => 'array',
    ];

并且:

protected $fillable = [
        'nr',
        'metas'
    ];

我认为问题出在属性转换上,因为这一点正在起作用:

Registries::create([
    'nr' => $old_document->no,
    'metas' => json_encode(['name'=>'r01']),
]);

我没有收到任何错误,只是JSON列为空。

2 个答案:

答案 0 :(得分:0)

因此,$metas->name仅适用于更新,在我的情况下,我需要这样插入:

Registries::create([
    'nr' => $old_document->no,
    'metas' => ['name'=>'r01']
]);

答案 1 :(得分:0)

我不喜欢关系dabatase中的属性转换。

所以这只是我基于array文档的猜测。

  

在处理以序列化JSON存储的列时,数组强制转换类型特别有用。

您正在尝试放置关联数组,对于JSON,该数组是一个对象。

我可能认为这是一个错误。

所以尝试在插入时进行类型转换:

Registries::create([
    'nr' => $old_document->no,
    'metas' => (object)['name'=>'r01'],
]);

属性投射

并使其成为对象:

protected $casts = [
    'metas' => 'object',
];