如何更新 Supabase 表中的整行?(收到 400 错误)

Reu*_*ose 5 supabase supabase-database

我正在尝试制作一个输入表单,用户可以在其中同时更改一行中的多个值,然后使用该update()方法将其提交到数据库。这些值作为 defaultValues 从 Supabase 表读取到多个输入字段中,用户可以编辑这些值,然后提交表单以更新表的 Supabase 实例中的值。

输入表格看起来像这样

从用户接收到的输入值存储在具有以下形状的对象中:

inputFields = {
    "name": "Piramal Glassed", // NEW
    "email": "piramal@glass.com", // NEW
    "contact": "98203" // NEW
    "pin": 400066, 
    "city": "Mumbai", 
    "state": "Maharashtra", 
    "country": "India", 
}

Run Code Online (Sandbox Code Playgroud)

标记为 的值// NEW是用户已更改的值,需要在 Supabase 表的后续行中更新。

我不断收到 400 错误。RLS 目前已禁用。这是我用来将数据发送回 supabase 表的函数。

    const { data, error } = await supabase
      .from("company")
      .update([inputFields.values])
      .match([originalFields.values]); // Contains Original Values Of Row That Need To Be Replaced (same shape as inputFields.values)
  };

Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

小智 6

看起来你的match过滤器不起作用。

我建议尝试通过 ID 来匹配行,因为您只想更新一行。这样,您实际上正在尝试更新与此数据匹配的所有行,这可能会导致问题。我不确定目前是否可以使用 supabase 进行这样的批量更新。

每当我想更新单行数据时,我都会在应用程序中使用它,并且没有任何问题。如果问题仍然相关,我建议尝试一下。

await supabase.from("company").update(inputFields).match({ id: company.id });

或者

await supabase.from("company").update(inputFields).eq("id", company.id)

您还可以只传递新值,.update()这样就不会更新整行,而只更新已更改的数据。