Doctrine2 Postgres JSONB 如何搜索

dan*_*l14 5 php doctrine-orm postgresql-9.3 jsonb

我正在使用 Postgres JSONB,以便在一个复杂系统的一个字段中存储一堆属性。

我有一个字段,称为属性,属性确实有对象树。

这是来自属性的一小部分数据。

{
    "urls": [],
    "games": false,
    "images": [],
    "rating": null,
    "founded": 0,
    "bannedIn": ["00000000-0000-0000-8888-000000000001",
    "00000000-0000-0000-8888-000000000002"],
    "comments": "",
    "chat": false
}
Run Code Online (Sandbox Code Playgroud)

在表中,我有一些对象被禁止在某些 guids 中,一些对象有空数组,而一些对象根本没有bannerIn 属性。

现在我试图获取bannedIn包含的每一行"00000000-0000-0000-8888-000000000001"(WORKS)

当我尝试获取bannedIn不包含的每一行时"00000000-0000-0000-8888-000000000001"(WORKS)

但是当我查询计算所有没有bannedIn的属性时,它会以0计数回退,即使我有1K个没有bannedIn的对象。

作品

$builder = $entityManager->createQueryBuilder()
    ->select('e')
    ->from(Entity::class, 'e')
    ->where('e.otherObject = :guid')->setParameter('guid', $guid)
    ->andWhere('GET_JSON_FIELD(e.properties, \'bannedIn\') LIKE ?1')
    ->setParameter(1, '%00000000-0000-0000-8888-000000000001%');
Run Code Online (Sandbox Code Playgroud)

有没有办法在key不存在的情况下查询jsonb?我也试过跟随,没有奏效。这 ?操作符是通过调用它的函数来实现的jsonb_exists(column_name, value)