Как я могу запросить одну запись / результат на основе UID в GraphiQL с Gatsby? - PullRequest
0 голосов
/ 17 мая 2019

Я использую GatsbyJS, в состав которой входит GraphQL. Я новичок в обоих. И на всю жизнь я не могу понять, как запросить одну запись с помощью GraphQl через значение UID. У меня есть простой файл JSON. В GraphiQL вывод этого запроса ....

query{
  allDataJson{
    edges {
      node {
        products{
          uid
          sku
          title 
          price
          image
        }
      }
    }
  }
}

дает мне все записи ..

{
  "data": {
    "allDataJson": {
      "edges": [
        {
          "node": {
            "products": [
              {
                "uid": 0,
                "sku": "8509698P",
                "title": "Cindy Crawford Home Bellingham Slate Sofa",
                "price": 655,
                "image": "https://images.rtg-prod.com/cindy-crawford-home-bellingham-slate-sofa_8509698P_image.png?w=150"
              },
              {
                "uid": 1,
                "sku": "10132859",
                "title": "Sofia Vergara Pacific Palisades Navy Plush Sofa",
                "price": 799.99,
                "image": "https://images.rtg-prod.com/sofia-vergara-pacific-palisades-navy-sofa_10132859_image.png?w=150"
              },
              {
                "uid": 2,
                "sku": "15028930",
                "title": "Eric Church Highway To Home Headliner Brown Leather Dual Power Reclining Sofa",
                "price": 1599.99,
                "image": "https://images.rtg-prod.com/eric-church-highway-to-home-headliner-brown-leather-power-plus-reclining-sofa_15028930_image.png?w=150"
              },
              {
                "uid": 3,
                "sku": "10141620",
                "title": "Bonita Springs Gray Sofa",
                "price": 499.99,
                "image": "https://images.rtg-prod.com/bonita-springs-gray-sofa_10141620_image.png?w=150"
              },
              {
                "uid": 4,
                "sku": "14103941",
                "title": "Villa Capri Blue Leather Sofa",
                "price": 899.99,
                "image": "https://images.rtg-prod.com/villa-capri-blue-leather-sofa_14103941_image.png?w=150"
              },
              {
                "uid": 5,
                "sku": "8509697P",
                "title": "Cindy Crawford Home Bellingham Indigo Sofa",
                "price": 655,
                "image": "https://images.rtg-prod.com/cindy-crawford-home-bellingham-indigo-sofa_8509697P_image.png?w=150"
              },
              {
                "uid": 6,
                "sku": "8509695P",
                "title": "Cindy Crawford Home Bellingham Cardinal Microfiber Sofa",
                "price": 655,
                "image": "https://images.rtg-prod.com/cindy-crawford-home-bellingham-cardinal-sofa_8509695P_image.png?w=150"
              },
              {
                "uid": 7,
                "sku": "10132950",
                "title": "Cindy Crawford Home Chelsea Hills Gray Sofa",
                "price": 799.99,
                "image": "https://images.rtg-prod.com/cindy-crawford-home-chelsea-hills-gray-sofa_10132950_image.png?w=150"
              },
              {
                "uid": 8,
                "sku": "10197704",
                "title": "Ivyleigh Silver Sofa",
                "price": 599.99,
                "image": "https://images.rtg-prod.com/ivyleigh-silver-sofa_10197704_image.png?w=150"
              },
              {
                "uid": 9,
                "sku": "10131403",
                "title": "Court Street Beige Sofa",
                "price": 599.99,
                "image": "https://images.rtg-prod.com/court-street-beige-sofa_10131403_image.png?w=150"
              }
            ]
          }
        }
      ]
    }
  }
}

Как мне запросить один uid ???

query{
  allDataJson(filter: ??? ){
    edges {
      node {
        products{
          uid
          sku
          title 
          price
          image
        }
      }
    }
  }
}

так что мои результаты примерно такие ???

{
  "data": {
    "allDataJson": {
      "edges": [
        {
          "node": {
            "products": [
              {
                "uid": 0,
                "sku": "8509698P",
                "title": "Cindy Crawford Home Bellingham Slate Sofa",
                "price": 655,
                "image": "https://images.rtg-prod.com/cindy-crawford-home-bellingham-slate-sofa_8509698P_image.png?w=150"
              },
            ]
          }
        }
      ]
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 17 мая 2019

GraphiQL также должен предложить вам запрос dataJson. В то время как allDataJson возвращает вам соединение (следовательно, массив), dataJson возвращает только один результат - часто используется с фильтром.

Так что-то вроде этого должно работать (я сам не смог попробовать это в GraphiQL):

query {
  dataJson(products: { uid: { eq: 2 } }) {
    products {
      uid
    }
  }
}

Пожалуйста, попробуйте сами с автозаполнением GraphiQL.

0 голосов
/ 17 мая 2019

В других ответах указана функция фильтра graphql в Gatsby, но ваш случай немного другой: ваш продукт представляет собой массив. По умолчанию вы не можете отфильтровать массив, возвращаемый полем - каждый элемент в массиве должен быть узлом.

Будет намного проще, если вы сможете преобразовать свою структуру данных из этого:

// data.json
{
  products: [{ "uid": 0 }, { "uid": 1 }]
}

... примерно так:

// data.json
[{ "uid": 0 }, { "uid": 1 }]

... и храните ваши метаданные в другом месте.

Таким образом, каждый элемент в массиве станет узлом, и вы можете фильтровать, как и ожидалось.

{
  allDataJson(filter: {
    uid: {eq: 1}
  }) {
    edges {
      node {
        id
      }
    }
  }
}

Если изменение структуры данных json невозможно, вы также можете написать свой собственный gatsby-transformer-json, который просто читает файл json и создает узел для каждого элемента в списке продуктов.

0 голосов
/ 17 мая 2019

вам нужно отправить идентификатор в аргументах запроса, и BE должен возвращать только одну запись на основе идентификатора. Как ниже.

query{


allDataJson(id:1 ){
    edges {
      node {
        products{
          uid
          sku
          title 
          price
          image
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...