如何更新Supabase记录?实现item唯一性的增量更新逻辑
解决方案
要实现item字段唯一、重复点击时累加quantity和price的需求,你需要结合Supabase的upsert方法和onConflict配置,步骤如下:
1. 给表添加唯一约束
确保ordereditems表的item字段有唯一约束,否则冲突检测不会生效。可以在Supabase控制台的表编辑器中给item字段勾选「唯一」,或者执行SQL:
ALTER TABLE ordereditems ADD CONSTRAINT unique_item UNIQUE (item);
2. 修改代码实现upsert逻辑
const incrementOrder = async ({ item, quantity, price }) => { const { data, error } = await supabase .from("ordereditems") .upsert( [{ item, quantity, price }], { onConflict: "item", update: { // 用EXCLUDED引用本次要插入的行数据,实现累加 quantity: "quantity + EXCLUDED.quantity", price: "price + EXCLUDED.price" } } ); if (error) { console.error('订单更新失败:', error); return; } return data; };
逻辑说明
upsert会自动判断:如果item不存在则插入新记录;如果item已存在,则触发update里的逻辑onConflict: "item"指定以item字段作为冲突检测的依据EXCLUDED是PostgreSQL的关键字,代表本次插入操作中被冲突拦截的那条数据,用它来获取本次传入的quantity和price,实现与现有数据的累加
内容的提问来源于stack exchange,提问作者Les Jetskii
相关产品推荐
相关产品推荐

