【发布时间】:2020-08-27 03:58:39
【问题描述】:
我创建了一个“收藏”功能,类似于许多网站中常见的“点赞”功能。
有3张桌子:
- 带有主键 UUID 的“用户”
- 带有 pk UUID 的“照片”
- “收藏夹”带有 pk user.UUID 和 post.UUID
对应的SQL是:
CREATE TABLE public."user" (
id uuid DEFAULT public.gen_random_uuid() NOT NULL
);
CREATE TABLE public."photo" (
id uuid DEFAULT public.gen_random_uuid() NOT NULL
);
CREATE TABLE public."favorite" (
userId uuid NOT NULL
photoId uuid NOT NULL
);
现在,我想查询带有计算字段 isFavorite 作为布尔值的照片,当当前用户收藏照片时,该值设置为 true。
所以,我创建了这个自定义 SQL 函数:
CREATE OR REPLACE FUNCTION public.isfavorite(photo photo, hasura_session json)
RETURNS boolean
LANGUAGE sql
STABLE
AS $function$
SELECT EXISTS (
SELECT *
FROM public.favorite
WHERE "userId" = (VALUES (hasura_session ->> 'x-hasura-role'))::uuid AND "photoId" = photo.uuid
)
$function$
我可以在 Hasura 中使用 SQL 创建这个函数,但是当我将此函数设置为照片表中的计算字段时,Hasura 显示此错误:
in table "photo": in computed field "isFavorite": function "isfavorite" is overloaded. Overloaded functions are not supported
我在哪里做错了?我们可以构建一个返回布尔值的自定义函数吗?您如何构建最喜欢(或喜欢)的功能?
已解决:数据库中有两个isFavorite 函数导致过载...
所以现在照片模式中有一个isFavorite 字段,但我需要提供$args 和hasura_session 作为参数。
如何在不填写参数的情况下提供hasura_session?
【问题讨论】:
-
请edit您的问题并为相关表格添加
CREATE TABLE语句。 -
@a_horse_with_no_name 完成。但我不确定这对回答这个问题是否非常有用......
-
那么计算列在哪里?
-
计算列在桌面照片上。我直接在 Hasura 控制台中完成所有操作,而不是使用 SQL。
-
photo表的create table语句中没有计算列
标签: postgresql graphql hasura