0

我正在尝试使用颤振从 Supabase 打印出多个数据,但它不起作用

getResponse(String uid) async {
    await client
        .from("privChatRoom")
        .select()
        .eq('userID', uid)
        .single()
        .execute()
        .then((value) {
      if (value.error == null) {
        print('value.data: ${value.data}');
      } else {
        print(value.error.message.toString());
        print(value.error.hint.toString());
      }
    });
  }

这是我在运行此功能时遇到的错误

I/flutter ( 2326): JSON object requested, multiple (or no) rows returned
I/flutter ( 2326): null

我有多个具有相同 uid 的行,我想获得它,请问我如何获得它

编辑:找到我只需要删除的答案.single()

4

3 回答 3

1

只是在这里澄清一下。

如果您使用single()过滤器,您的结果必须返回 1 且只有 1 个结果,否则将失败。如果你想要多个返回值,你可以摆脱single()这样的:

getResponse(String uid) async {
    await client
        .from("privChatRoom")
        .select()
        .eq('userID', uid)
        .execute()
        .then((value) {
      if (value.error == null) {
        print('value.data: ${value.data}');
      } else {
        print(value.error.message.toString());
        print(value.error.hint.toString());
      }
    });
  }
于 2021-09-28T21:29:48.890 回答
0

我不是颤振用户,但使用.single()方式应该与 Javascript 客户端相同。

.limit(1)<= 将单个记录作为数组返回 [{id:123,firstname:'Harry',lastname:'Styles'}]

.single()<= 将单个记录作为对象返回 {id:123,firstname:'Harry',lastname:'Styles'}

于 2021-10-14T14:36:02.367 回答
0

如果期望结果没有单个响应,请调用不带.single(). 那么你应该得到一个空的结果。

或者该uid值可能不会在您的数据库中存在!

尝试替换.single().limit(1),

不要忘记这个函数返回一个数组!所以你必须像这样获取数据value.data[0],如果不存在数据,那么value.data将是一个空数组[]

如果您希望获得 0 行,但您可能想要使用它.maybeSingle()

阅读: https ://postgrest.org/en/stable/api.html#singular-or-plural

于 2021-09-28T10:53:14.807 回答