在一个supabase js查询中获取计数和指定范围



我用nextjs和supabase制作一个食谱网站。我有一个场合表,里面有很多食谱的外键。我可以很容易地查询所有食谱在那个场合的场合,但是我想要分页,所以我需要一个计数和范围。我将如何去做这件事,或者我必须做一个RPC代替?

这是我当前的查询,在一个场合返回所有食谱-查询中的评论是我想在

上放一个计数/范围
.from("occasions")
.select(
`*,
recipes_occasions(
recipes( 
// I WANT TO GET EXACT COUNT OF ALL RECIPES IN AN OCCASION HERE
recipeId, title, slug, totalTime, yield, ingredients,
recipes_categories (
categories(title, slug)
),
recipes_diets (
diets(title, slug)
),
recipes_cuisines (
cuisines(title, slug, code)
)
),

)`
)
.eq("slug", slug )
.range(0,4)
// I WANT TO TAKE SPECIFIC RANGE HERE (e.g. range(12, 24) or range(200, 212)

有多种方法可以解决这个问题。将其拆分为两个单独的查询当然是一种选择。

另一种选择可能是翻转查询并获得与其相关场合的食谱。

const { data, error } = supabase
.from("recipes")
-- Edit above fixed recipe typo
.select(
`*,
recipes_categories (
categories(title, slug)
),
recipes_diets (
diets(title, slug)
),
recipes_cuisines (
cuisines(title, slug, code)
),
occasions!inner(*)`,
{ count: 'exact' }
)
.eq("occasions.slug", slug )
.range(0,4)

count: 'exact'将获得食谱的数量,以便您可以使用它来分页。

occasions之后使用!inner关键字,可以根据occasions的值过滤所选recipes的结果。——修改上面的配方错字

我设法通过首先从单元格中获取偶次ID,然后另一个查询来获取具有该场合ID的食谱,从而使范围工作。也增加了解构计数。

const { data, error } = await supabase
.from("occasions")
.select(`occasionId`)
.eq("slug", context.query.slug )
const occasionId = await data[0].occasionId;
const { data: recipes, count, recipeError } = await supabase
.from('recipes_occasions')
.select(`*, recipeDetails: recipes(title)`, {count: 'exact'})
.eq('occasion_id', occasionId)
.range(0,1)

结果在我的终端

[
{
id: 134,
created_at: '2022-12-13T18:17:35.433285+00:00',
recipe_id: 'd7c493ff-6aae-4929-bf74-c6d44e2eb8f7',
occasion_id: '1c907e40-4717-4c22-aeb6-c51044fb276a',
recipeDetails: { title: 'Easter egg cheesecake' }
},
{
id: 135,
created_at: '2022-12-13T18:18:39.011853+00:00',
recipe_id: '30254e94-6692-4a57-a173-c5ccee758d59',
occasion_id: '1c907e40-4717-4c22-aeb6-c51044fb276a',
recipeDetails: { title: 'Rhubarb & custard tart' }
}
]
13

相关内容

  • 没有找到相关文章

最新更新