1

我正在使用 Flutter 和 Supabase,我正在尝试获取表中与数组字段部分匹配的所有元素。

我有一个带有 jsonb 数组列的表,其中包含PollItem在 json 映射中转换为的对象列表()

Map<String, dynamic> toJson() {
  return {
    'player': player.toJson(),
    'votes': votes,
    'description' : description 
  };
}

player 是另一个Player以相同方式在地图中转换的对象 ( )。我将对象插入到数据库列中

await dbClient.from('polls')
  .insert([{
    ...
    "items" : poll.items.map((i) => i.toJson()).toList(),
    ...
  ])
  .execute()

它有效。在 supbase 列字段中,结果类似于

[
  {
    "votes": 0,
    "player": {
      "id": "409",
      "name": "INSIGNE",
      "team": "Napoli"
    },
    "description": ""
  },
  {
    "votes": 0,
    "player": {
      "id": "2530",
      "name": "IBRAHIMOVIC",
      "team": "Milan"
    },
    "description": ""
  }
]

现在我想从同一个表中选择部分匹配items数组项的所有行。从PollItem我想找出数据库中是否有某行在项目列中至少有一个匹配项的列表中。我尝试了不同的方法,但总是遇到一些错误。

// Method 1
await dbClient.from("polls")
  .select()
  ...
  .contains('items', poll.items.map((i) => i.toJson()).toList())
  .execute()
I get following error: 
[GETX] Error: DbRequest Instance of 'DbRequest' invalid input syntax for type json
// Method 2
await dbClient.from("polls")
  .select()
  ...
  .contains('items', jsonEncode(poll.items))
  .execute()
I get following error: 
[GETX] "Error: DbRequest Instance of 'DbRequest' malformed array literal: "[{"player":{"id":"409","name":"INSIGNE","team":"Napoli"},"votes":0,"description":""},{"player":{"id":"2530","name":"IBRAHIMOVIC","team":"Milan"},"votes":0,"description":""}]""

我究竟做错了什么?先感谢您。

4

0 回答 0