带有 Laravel 的 Postgresql:使用子字符串过滤 Json 字段

Posted

技术标签:

【中文标题】带有 Laravel 的 Postgresql:使用子字符串过滤 Json 字段【英文标题】:Postgresql with Laravel: Filter Json field with substring 【发布时间】:2019-06-27 04:16:34 【问题描述】:

我有一个表说post_media,它有一个 JSON 列metadata。现在,metadata JSON 有一个字段为 originalName,它具有文件/媒体的全名,例如:test.png。 所有类型的文件都有:.png、.jpeg、.mov、.pdf、.ppt、.doc 等 我想从表中选择仅查找 png 文件。扩展没有单独的列。

我已经尝试使用asmutator 处理虚拟列。但是where 不能使用虚拟列。

$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->where('file_extention', 'png')->get();

我想要所有 PNG 扩展文件。有什么想法吗?

【问题讨论】:

有几件事要记下来。如果您创建虚拟列,则不能将该虚拟列置于 where 条件中。你可以试试。 @narayansharma91,不适合拥有。显示相同的错误:-SQLSTATE[42703]: Undefined column: 7 ERROR: column "file_extension" does not exist 【参考方案1】:

你可以做的就是把你的正则表达式条件放在下面的 where 条件上。

$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->whereRaw("metadata->>'originalName' from '\.([^\.]*)$')='png'")->get();

它会帮助你。

【讨论】:

享受@SahilGupta

以上是关于带有 Laravel 的 Postgresql:使用子字符串过滤 Json 字段的主要内容,如果未能解决你的问题,请参考以下文章

在 MAMP 中使用 Laravel 设置 PostgreSQL

不能将 0 或 1 存储为布尔 laravel postgresql

如何使 BLOB 在 Oracle 和 PostgreSQL 上工作?

带有刀片组件的 Laravel 抛出目标类视图不存在

如何使 Laravel 5 重定向到没有哈希(#)的 Angular 路由?

使用 PostgreSQL 更新 Laravel 迁移中的枚举列