Watch a live product demo 👀 See how Sanity powers richer commerce experiences

Is it Possible to Pass a Document Reference to Validation and Access the Dereferenced Fields?

2 replies
Last updated: Aug 6, 2021
Heyyy I have a schema validation question. Is it possible to pass a doc reference to validation and access the dereferenced fields? It seems not. It also seems like the solution is to perform a fetch to get it. Is there anything I'm missing here?
Aug 6, 2021, 6:57 PM
I expect you’re right that a fetch will be involved. I would use the Sanity client and get the data you’re after in that fetch (in my case below, the title). This snippet lets you paste a document _id into a string field and if it exists, it throws a validation error that contains that document’s title. I’d recommend looking at this function to add some robustness to the query:

import sanityClient from 'part:@sanity/base/client';

const client = sanityClient.withConfig({ apiVersion: '2021-08-06' });

// ...

export default {
  name: 'validationTest',
  title: 'Validation Test',
  type: 'document',
  fields: [
    {
      name: 'id',
      title: 'ID',
      type: 'string',
      validation: Rule => Rule.custom(async (doc) => {
        const match = await client.fetch(`*[_id == $id][0] {_id, title}`, { id: doc })
        <http://console.info|console.info>(match)
        return !match ? true : `This document already exists. Title: ${match.title}`
      })
    }
  ]
}
Aug 6, 2021, 7:46 PM
thanks, Geoff!
Aug 6, 2021, 8:33 PM

Sanity.io – build remarkable experiences at scale

Sanity is a customizable solution that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Related answers

Get more help in the community Slack

TopicCategoriesFeaturedRepliesLast Updated
After adding the subtitle and running this code npm run graphql-deploy It does nothingSep 15, 2020
how to limit a reference to just one entry in Studio reference input side versus the default as-many-entries-as-you-fill-in-an-array...Sep 18, 2020
Is it possible to fetch more than one "_type" using GROQ?Nov 2, 2020
I want to add a view with the Structure builder (S.view.component) where I list similar documents based on the title. What...Sep 23, 2020
Is there a structure builder example where the format of each preview for the document list is modified?Feb 3, 2021
I have an array of references to a country schema type but it always just returns NULL values for meJan 30, 2021
Hi, I need help with a query for getting the url of an image asset. Here is what I've been trying, but I only get the _ref...Dec 1, 2020
Sanity UI looks brilliant :smiley: Is something like the current date picker possible at the moment? I’m not sure if anicon...Dec 21, 2020
Hey everyone. I have been coding and may have potentially accidentally deleted something. Does anyone know how to resolve...Dec 26, 2020
Hello everyone and happy new year :raised_hands::skin-tone-2:, I have a problem with outputting Portable Text :disappointed:...Jan 1, 2021

Related contributions

Clean Next.js + Sanity app
- Template

Official(made by Sanity team)

A clean example of Next.js with embedded Sanity ready for recomposition.

Cody Olsen
Go to Clean Next.js + Sanity app

Blog with Built-in Content Editing
- Template

Official(made by Sanity team)

A Sanity-powered blog with built-in content editing and instant previews.

Go to Blog with Built-in Content Editing