Проблема следующая. На проде мы используем PostgreSQL, который поддерживает тип данных JSON. С ним все здорово в тестах, если мы работаем с Symfony + Doctrine - там есть свои кастомизируемые типы, которые в тестах не требуют того, чтобы поле в БД было указано как JSON. Другими словами, в тестах мы используем SQLite, но для него Doctrine сама видит, что он не поддерживает JSON, создает при маппинге таблиц поля типа string, а потом работает с ними так, как будто это JSON, декодируя или кодируя его туда-обратно, где это требуется.
Но когда мы начинаем работать с Zend Expressive 3 + zendframework/zend-db, то начинаются проблемы. Мы вручную пишем в тестах конфиг БД для SQLite, где не можем указать поле типа JSON, и приходится использовать string. В итоге код вроде:
$row = $this->tableGateway->select(
static function (Select $select) use ($blah) {
$select->where->nest
->equalTo('blah', $blah)
->or
->equalTo('sum, 1);
}
);
нам вернет некий массив, в котором поле, которое отмечено в конфиге как string, но в котором содержится некий JSON, будет строкой. Код приложения такого конечно же не ожидает и падает. Другими словами, код приложения ложится с ошибкой TypeError, ну или например с "Illegal string offset 'holder'" - то есть приложение, обращаясь к якобы массиву через "$arr['holder']", на самом деле обращается к строке, в которой есть JSON и в нем объект с полем "holder".
Вопрос: Как сделать так, чтобы SQLite научился работать с JSON и zendframework/zend-db понимала это и равно как отдавала нужные нам поля как массивы (результаты преобразования JSON), а не как строки, содержащие JSON, равно и принимала массивы и записывала их в БД как JSON?