问题描述
我正在学习 Sanity io CMS 和 GROQ。我使用 Sanity 预定义的博客架构构建了一个简单的博客。我已经设法显示帖子、单个帖子和作者页面,显示姓名、图片和个人简介。
我想要做的是在他的页面中显示属于作者的博客文章列表。在帖子模式中有对作者的引用:
{
name: 'author',title: 'Author',type: 'reference',to: {type: 'author'},},
我尝试在作者架构中添加对 post
的数组引用,但结果是在 CMS 中我需要手动向作者添加帖子。虽然,我想查询作者并返回属于作者的帖子,因为在帖子架构中有对它的引用,但找不到如何做。与其说是架构问题,不如说是 GROQ 查询,还是两者兼而有之?
解决方法
自己通过查看 Query Cheat Sheet 页面中的 Sanity 文档找到了答案。这不是方案问题,而是 GROQ 查询问题。在作者页面中,在显示作者简介等的查询中,我添加了另一部分,我在其中查询该作者的帖子:
// GROQ Query
sanityClient
.fetch(
`*[_type == "author"]{
name,bio,"authorImage": image.asset->url,"posts": *[_type == "post" && author._ref in *[_type=="author" && name == name ]._id ]{
title,"slug": slug.current,}
}`
)
.then((data) => setAuthor(data[0]))
.catch(console.error);
然后我可以简单地通过“帖子”进行映射,使用“slug”来构建单个帖子的 URL。
{author.posts &&
author.posts.map((p) => {
return (
<li>
<a href={`/post/${p.slug}`}>{p.title}</a>
</li>
);
})
}