【问题标题】:Postgresql with Laravel: Filter Json field with substring带有 Laravel 的 Postgresql:使用子字符串过滤 Json 字段
【发布时间】: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

标签: laravel postgresql orm


【解决方案1】:

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

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

它会帮助你。

【讨论】:

  • 享受@SahilGupta
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2014-01-06
  • 2021-06-06
  • 1970-01-01
  • 2020-05-21
  • 2020-09-17
  • 2022-06-21
相关资源
最近更新 更多