laravel - 带有 Laravel 的 Postgresql : Filter Json field with substring

标签 laravel postgresql orm

我有一个表说 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 条件上。

$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/

相关文章:

sql - PostgreSQL - 在执行 SELECT 时检查外键是否存在

postgresql - 索引中如何发生碎片?

sql - Postgresql:如何将表导出到单独的 csv 文件中

php - 如何将 MySQL 查询转换为 Laravel Eloquent 查询?

php - Laravel 如何从 3 个表中获取数据

postgresql - 任何适用于 Node.js 的 Postgres 兼容 ORM?

php - 在 Laravel 4 中如何查询 ManyToMany 关系?

java - 如何向 Hibernate 过滤器添加大于/小于

php - Laravel Eloquent delete() 不工作

php - Laravel 查询构建器获取用户登录记录