带有 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 文件。扩展没有单独的列。
我已经尝试使用as
和mutator
处理虚拟列。但是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 上工作?