通过Postgres DB中的JSON键进行学说搜索

时间:2019-06-19 08:38:06

标签: postgresql doctrine

我有一个具有{"ios":{"min":"7.0","max":"10.3"}}这样的结构的json列,我需要按键进行搜索。例如,我需要获取OS为ios的记录。注意,我使用的是DBAL查询构建器,而不是DQL。我知道在Postgres中有像?&?|这样的运算符,但是在理论上用$1&$1|代替了它们,将它们视为参数占位符。我发现这些运算符具有jsonb_exists_alljsonb_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

有什么办法解决吗?

0 个答案:

没有答案