【问题标题】:Graphql, return result only if record not nullGraphql,仅当记录不为空时才返回结果
【发布时间】:2020-10-26 04:19:36
【问题描述】:

在 Gatsby 中完全是新的(我的应用在这里构建)。在 Graphql 中也是新的,但我从同事那里完成了这个项目,现在我需要找到一种方法来解决它。

我在 graphql 中有一个查询,如下所示:

query MediasQuery {
    allStrapiMedias(sort: { fields: [date], order: DESC }) {
      edges {
        node {
          id
          name
          description
          date(formatString: "Do MMMM, YYYY")
          link
          poster {
            childImageSharp {
              fluid {
                src
              }
            }
          }
          file {
            url
          }
        }
      }
    }
  }

我面临的问题是file记录可以存在与否,更准确地说,如果link记录为空,那么我应该找到file(这就是它在Strapi中的构建方式)。

如果我至少有一条 file 记录,则查询运行正常,但一旦我从数据库中删除此记录,所有应用程序都会崩溃。

如果url 为空或null,我怎样才能使该查询只返回file?

【问题讨论】:

    标签: graphql gatsby


    【解决方案1】:

    您正在查询一个对象,该对象将有一个属性 (file) 填充或不填充 url。您只需将该逻辑添加到您的 JavaScript 和 React 代码中。当您将打印文件时,添加新逻辑,例如:

    if (data.allStrapiMedias.edges.node.file) return <ComponentA/>
    else return <ComponentB/>
    

    我认为您正在寻找的是以前的 sn-p.但是,在回答您的问题时,您可以通过在查询中添加过滤器来实现它:

    query MediasQuery {
        allStrapiMedias(
          sort: { fields: [date], order: DESC }
          filter: { file: {url: {ne: null }}}
          ) {
          edges {
            node {
              id
              name
              description
              date(formatString: "Do MMMM, YYYY")
              link
              poster {
                childImageSharp {
                  fluid {
                    src
                  }
                }
              }
              file {
                url
              }
            }
          }
        }
      } 
    

    更多详情请见GraphQL Query Options Reference。

    【讨论】:

    • 伙计,它说没有定义
    • 我错过了查询过滤器中的url,它已更新。但是,您可以在 localhost:8000/___grahpql 操场上对其进行测试以适应我的解决方案(第二个)。这与复制/粘贴无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多