2017-06-08 19 views
5

क्या मैं एक ग्राफिकल क्वेरी में एक से अधिक तत्व प्राप्त कर सकता हूं? मेरे पास कई उत्पाद सूची डेटा हैं और मैं अपने घटक में तीन उत्पादों को प्राप्त करना चाहता हूं। मेरे पास आवश्यक उत्पाद आईडी की एक सरणी है, क्या मैं इसे क्वेरी करने के लिए पास कर सकता हूं? यह एक उत्पाद के लिए अपनी क्वेरी है:अपोलो (ग्राफ़क्यूएल) एक प्रश्न में एक से अधिक तत्व प्राप्त करता है

query ProductInCartQuery($id: ID!){ 
    Product(id: $id) { 
    id 
    name 
    price 
} 
} 

लेकिन मुझे नहीं लगता कि मैं सिर्फ तीन उत्पादों के लिए एक समारोह में रख और तीन बार उदाहरण के लिए निष्पादित कर सकते हैं।

+0

कृपया अपना स्कीमा कोड रखने के लिए अपनी पोस्ट संपादित करें। – maninak

+0

निश्चित रूप से आप कर सकते हैं ... –

+0

कैसे? मैंने अपनी क्वेरी को संपादित में जोड़ा। – Alwox

उत्तर

6

यह हर प्रकार के लिए प्रश्नों की दो प्रकार की पेशकश करने के लिए आम और बहुत उपयोगी है तुम हो:

  1. एक प्रश्न एक id या अन्य विशेष क्षेत्रों के साथ एक एकल नोड लाने के लिए, कि अपने मामले Product में है (आप पहले से ही ये लो)।

  2. विभिन्न फ़िल्टर स्थितियों के आधार पर कई नोड्स लाने के लिए एक क्वेरी, चलो इसे allProducts पर कॉल करें।

फिर आपके पास एक प्रश्न में एकाधिक उत्पादों को लाने के लिए दो विकल्प हैं।

सबसे पहले, आप Product क्वेरी का उपयोग कई बार और GraphQL Aliases का उपयोग प्रतिक्रिया डेटा में एक नाम टकराव से बचने के लिए कर सकते हैं:

query ProductInCartQuery($firstId: ID!, $secondId: ID!){ 
    firstProduct: Product(id: $firstId) { 
    id 
    ... ProductInfo 
    } 

    secondProduct: Product(id: $secondId) { 
    id 
    ... ProductInfo 
    } 

    fragment ProductInfo on Product { 
    name 
    price 
    } 
} 

आप इस क्वेरी स्ट्रिंग गतिशील आईडी आप क्वेरी करना चाहते हैं पर निर्भर करता है का निर्माण कर सकता है। हालांकि, यह शायद आवश्यक फिल्टर सेटअप के साथ allProducts क्वेरी का उपयोग करने के लिए सबसे अच्छा है अगर विभिन्न आईडी की संख्या गतिशील है:

query filteredProducts($ids: [ID!]!) { 
    allProducts(filter: { 
    id_in: $ids 
    }) { 
    ... ProductInfo 
    } 
} 

fragment ProductInfo on Product { 
    name 
    price 
} 

आप इसे बाहर अपने आप को this GraphQL Playground मैं तुम्हारे लिए तैयार में की कोशिश कर सकते हैं। अधिक पृष्ठभूमि जानकारी in this article मिल सकती है।

+0

धन्यवाद! फ़िल्टर पैरामीटर बिल्कुल वही था जो मुझे चाहिए;) – Alwox

0

क्वेरी में उत्पाद आईडी जोड़ने के लिए आप input प्रकार को परिभाषित कर सकते हैं। cheat sheet देखें।

query ProductsInCartQuery($productIds: ProductIds!) { 
 
    Products(productIds: $productIds) { 
 
    id 
 
    name 
 
    price 
 
    } 
 
}

सर्वर पर आप input प्रकार के साथ स्कीमा निर्धारित इस प्रकार है::

तो ग्राहक पर क्वेरी दिखाई दे सकता है

input ProductIds { 
 
    ids: [ID!] 
 
} 
 

 
type Query { 
 
    Products(productIds: ProductIds!) { 
 
    id 
 
    name 
 
    price 
 
    } 
 
} 
 

 
schema { 
 
    query: Query 
 
}

संबंधित मुद्दे