我有一个表说 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 条件上。
$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->whereRaw("metadata->>'originalName' from '\.([^\.]*)$')='png'")->get();
它会帮助你。
关于laravel - 带有 Laravel 的 Postgresql : Filter Json field with substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783816/