如何在Supabase JS中从关联数组获取指定Contacts表数据行?
解决Supabase中使用
in过滤器查询关联ID数据的问题 问题场景
我有Clients和Contacts两张数据表,Clients表的contacts字段存储Contacts表的用户ID数组。已通过代码成功获取该ID数组,但使用in过滤器从Contacts表查询对应数据时执行失败。
报错信息
{ "code": "PGRST100", "details": "unexpected \"[\" expecting \"(\"", "hint": null, "message": "\"failed to parse filter (in.[object Object])\" (line 1, column 4)" }
错误原因
在getAssociatedContacts函数中,使用filter时错误地将数组包装成了对象:
.filter('id', 'in', { associatedContactsArray });
Supabase的in过滤器要求直接传入数组类型的值,而不是包含数组的对象,这会导致解析过滤器语法失败。
另外,原代码中判断fetchedContacts.contacts != null的逻辑有误,因为contacts是查询返回的Contacts表数据数组,每个元素是单个联系人的完整数据,不存在contacts子字段。
正确实现代码
async function getAssociatedContacts() { const { data: contacts, error } = await supabaseClient .from('contacts') .select('*') .filter('id', 'in', associatedContactsArray); // 直接传入数组,而非对象 if (error) { console.log('ERROR GETTING ASSOCIATED CONTACTS', error); hasAssociatedContacts = false; return; } if (contacts && contacts.length > 0) { console.log('GOT CONTACT DETAILS'); console.log('CONTACTS', contacts); hasAssociatedContacts = true; } else { console.log('NO CONTACT DETAILS'); hasAssociatedContacts = false; } }
关键修改点
- 将
{ associatedContactsArray }改为associatedContactsArray,直接传递ID数组给in过滤器 - 调整错误处理逻辑,优先判断
error避免后续无效操作 - 修改数据存在性判断为检查
contacts.length > 0,符合Contacts表的查询结果结构
内容的提问来源于stack exchange,提问作者ethanfox27
相关产品推荐
相关产品推荐

