如何在Supabase GraphQL中按计算列items_count排序?
如何在Supabase GraphQL中按计算列排序
目前的问题是:通过行级函数定义的items_count计算列可以正常查询,但自动生成的groupOrderBy输入类型里没有这个字段,导致无法按它排序。下面提供可行的解决方案:
方案一:创建包含计算列的视图(推荐)
Supabase的GraphQL生成器会将视图中的列视为普通表字段,自动生成包含该列的排序输入类型。
1. 创建视图
执行以下SQL创建包含items_count的视图:
CREATE OR REPLACE VIEW public.group_with_count AS SELECT g.id, g.name, COUNT(i.id) AS items_count FROM public.group g LEFT JOIN public.items i ON g.id = i.group_id GROUP BY g.id, g.name;
2. 使用视图进行查询排序
创建视图后,Supabase会自动生成group_with_countCollection查询和group_with_countOrderBy输入类型,此时就可以按items_count排序了:
query AllGroups($sort: [group_with_countOrderBy!]) { group_with_countCollection(orderBy: $sort) { edges { node { id name items_count } } } }
你可以传入排序变量,比如:
{ "sort": [{"items_count": "DESC"}] }
方案二:扩展GraphQL Schema(进阶)
如果需要保留原group表的查询,可手动扩展GraphQL Schema,添加items_count到groupOrderBy输入类型,并自定义排序逻辑。不过这种方法需要注意:Supabase重新生成Schema时可能会覆盖自定义内容,需要通过PostGraphile的配置或自定义扩展来持久化修改,步骤相对复杂,适合有GraphQL Schema扩展经验的用户。
内容的提问来源于stack exchange,提问作者Guylan DIEU
相关产品推荐
相关产品推荐

