У меня есть несколько подходов, но из-за сложности запроса sql. Я установил и использовал JSON_GET_TEXT: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Postgresql\JsonGetText JSON_EXTRACT_PATH: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Postgresql\JsonExtractPath
но безрезультатно из-за характера json
select * from workshop_session where author -> 0 ->> 'id' = '2'
{author:
[
{"id": 2, "email": "example@example.com"},
{"id": 3, "email": "example2@example.com"}
]
}
ЦЕЛЬ состоит в том, чтобы использовать ключ поля json, то есть идентификатор, в предложении where.
Решение проблемы
Вы должны использовать jsonbтип вместо того json, если вам нужно использовать ключи в условиях. Чтобы получить желаемый результат, измените тип столбца на jsonb, доктрина ORM очень хорошо это поддерживает. И используйте jsonb_path_existsфункцию в своем WHEREпредложении.
select * FROM workshop_session WHERE jsonb_path_exists(author, '$[*].id? (@ == 2)')
Демо DBFiddle. Этот запрос вернет сеансы, в которых идентификатор автора = 2.
$[*].id- путь к значению id в вашем массиве объектов jsonb
Комментариев нет:
Отправить комментарий