Laravel雄辩:如何删除JSON列儿童密钥?

发布于 2025-01-20 21:46:19 字数 389 浏览 0 评论 0原文

我有一个JSONB列foo,我想在不修改其他儿童密钥的情况下删除键bar-> abc

我尝试了一下:

MyModel::find(123)->update([
        'foo' => DB::raw("JSON_REMOVE(foo, 'bar->abc')")
    ]);

但是它将foo JSONB列重置为[]

如何从带有Laravel雄辩的JSONB列中删除给定的键,例如bar bar-> abc ?

(我正在使用PostgreSQL数据库)

I have a jsonb column foo in which I would like to remove the key bar->abc without modifying other children keys.

I tried this:

MyModel::find(123)->update([
        'foo' => DB::raw("JSON_REMOVE(foo, 'bar->abc')")
    ]);

But it reseted the foo jsonb column to [].

How can I remove a given key like bar or only children key like bar->abc from a jsonb column with Laravel Eloquent?

(I'm using PostGreSQL database)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

澜川若宁 2025-01-27 21:46:19

我建议您在模型中使用 $casts 属性:

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

将列数据转换为数组,然后修改数组格式的结果。

I recommended you use $casts property in your model:

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

to cast your column data to the array, then modify the result that is in the array format.

离不开的别离 2025-01-27 21:46:19

我终于用:

DB::connection('myconnection')
  ->statement("UPDATE myschema.users 
               SET    foo = foo::jsonb - 'bar'
               WHERE  id  = '123';"
  );

I finally fixed it with:

DB::connection('myconnection')
  ->statement("UPDATE myschema.users 
               SET    foo = foo::jsonb - 'bar'
               WHERE  id  = '123';"
  );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文