带Laravel的Postgresql:带子字符串的过滤Json字段
我有一个表,比如说带Laravel的Postgresql:带子字符串的过滤Json字段,laravel,postgresql,orm,Laravel,Postgresql,Orm,我有一个表,比如说post\u media,它有一个JSON列metadata。现在,metadataJSON有一个字段称为originalName,它的全名为file/media,例如:test.png。 所有类型的文件都有,比如:.png、.jpeg、.mov、.pdf、.ppt、.doc等等 我想从表中选择“仅查找png文件”。扩展没有单独的列 我使用as和mutator对虚拟列进行了尝试。但是,其中不使用虚拟列 $post_media = PostMedia::select(\DB::r
post\u media
,它有一个JSON列metadata
。现在,metadata
JSON有一个字段称为originalName
,它的全名为file/media,例如:test.png。
所有类型的文件都有,比如:.png、.jpeg、.mov、.pdf、.ppt、.doc等等
我想从表中选择“仅查找png文件”。扩展没有单独的列
我使用as
和mutator
对虚拟列进行了尝试。但是,其中
不使用虚拟列
$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->where('file_extention', 'png')->get();
我想要所有的PNG扩展文件。你知道吗?你能做的就是把你的正则表达式条件放在下面的条件中
$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->whereRaw("metadata->>'originalName' from '\.([^\.]*)$')='png'")->get();
它将对您有所帮助。您所能做的就是将regex条件设置为下面的where条件
$post_media = PostMedia::select(\DB::raw("metadata->>'originalName' from '\.([^\.]*)$') as file_extention"))->whereRaw("metadata->>'originalName' from '\.([^\.]*)$')='png'")->get();
这会对你有所帮助。记下一些事情。如果创建虚拟列,则无法将该虚拟列置于where条件。你可以尝试拥有。@narayansharma91,而不是拥有。显示相同的错误:-
SQLSTATE[42703]:未定义列:7错误:列“文件扩展名”不存在
需要注意的几点。如果创建虚拟列,则无法将该虚拟列置于where条件。你可以尝试拥有。@narayansharma91,而不是拥有。显示相同错误:-SQLSTATE[42703]:未定义列:7错误:列“文件扩展名”不存在