我有一个具有{"ios":{"min":"7.0","max":"10.3"}}
这样的结构的json列,我需要按键进行搜索。例如,我需要获取OS为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
有什么办法解决吗?