Собственно, нужно сделать нечто подобное:
foreach ($filter->data as $key => $value) {
$query->andWhere("JSON_GET_TEXT(t.data, '$key') = :$key");
$query->setParameter($key, $value);
}
Проблема в том, что $key может содержать что угодно, это невалидируемые пользовательские данные. Следовательно, есть опастность sql-инъекций. И если $value эскейпится при подготовке запроса, то $key вставляется в запрос напрямую и как его эскейпить - не понятно. Есть какие-то механизмы в доктрине для этого?