Поиск доктрины по ключам json в БД postgres - PullRequest
0 голосов
/ 19 июня 2019

У меня есть столбец json с такой структурой {"ios":{"min":"7.0","max":"10.3"}}, и мне нужно искать по ключу. Например, мне нужно получить записи, где ОС ios. Обратите внимание, я использую построитель запросов DBAL, а не DQL. Я знаю, что в Postgres есть операторы типа ?& и ?|, но доктрина заменяет их на $1& и $1|, рассматривая их как заполнители параметров. Я обнаружил, что эти операторы имеют замены функций, такие как jsonb_exists_all и jsonb_exists_any, но я получаю учение об ошибке function not found, даже если я добавляю пользовательский тип. Чтобы добавить пользовательский тип, я использую существующий комплект (у меня есть в моем проекте) https://github.com/martin-georgiev/postgresql-for-doctrine BaseFunction класс, расширяющий мой класс от него.

Пользовательский тип:

<?php declare(strict_types = 1);
/**
 * offers
 * User: bogdandubyk
 * Date: 2019-06-18
 * Time: 16:30
 */
namespace App\Common\Components\Doctrine\ORM\Query\AST\Functions;

use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseFunction;

class JsonbExistsAny extends BaseFunction
{
    protected function customiseFunction(): void
    {
        $this->setFunctionPrototype('JSONB_EXISTS_ANY(%s, %s)');
        $this->addNodeMapping('StringPrimary');
        $this->addNodeMapping('StringPrimary');
    }
}

и я добавляю его к doctrine.yml

Есть идеи как ее решить?

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