如何更新 Supabase Table 中的整行? (出现 400 错误)

How To Update Entire Row In Supabase Table? (Getting 400 Error)

我正在尝试制作一个输入表单,用户可以在其中同时更改一行中的多个值,这些值会使用 update() 方法提交到数据库。这些值正在从 Supabase Table 中读取到几个输入字段中作为默认值,用户可以编辑这些值并稍后提交表单以更新 table.

的 Supabase 实例中的值

Input Form Looks Like This

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

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

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

我不断收到 400 错误。 RLS 现在被禁用。这是我用来将数据发送回 supabase table.

的函数
    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)
  };

我做错了什么?

您的 match 过滤器似乎不起作用。

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

这是我在我的应用程序中使用的东西,每当我想更新单行的数据时,我没有遇到任何问题。如果问题仍然相关,我建议试试这个。

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

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

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