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