Postgresql с Laravel: фильтровать поле Json с подстрокой - PullRequest
0 голосов
/ 27 июня 2019

У меня есть таблица с именем 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. Есть идеи?

1 Ответ

2 голосов
/ 27 июня 2019

То, что вы можете сделать, это просто поставить условие регулярного выражения в том месте, где указано ниже.

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

Это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...