जब मैं एक नेस्टेड मॉडल शामिल करने के लिए क्वेरी करता हूं - उदा। GET /api/Widgets/1?filter={include: {"foos": "bars"}}
- मुझे अपने परिणामों में डुप्लिकेट foos
मिलता है। मैंने सोचा कि यह एक बाएं जॉइन या ऐसा कुछ था, क्योंकि मैं MySQL का उपयोग कर रहा हूं, लेकिन जब मैं loopback:connector:mysql
डीबग मोड में लूपबैक चलाता हूं, तो मैं देख सकता हूं कि प्रारंभिक विजेट के लिए क्वेरी एक बार चलती है, लेकिन यह क्वेरी foo दो बार चलता है, और बार के लिए क्वेरी दो बार चलता है। यह व्यवहार क्यों हो रहा है, और मैं क्या बदल सकता हूं (मेरे मॉडल, मेरा कोड या मेरी अपेक्षाएं)?लूपबैक में यह घोंसला वाला संबंध डुप्लिकेट परिणाम क्यों लौटा रहा है?
मॉडल:
{
"name": "Widget",
...
"relations": {
"foos": {
"type": "hasMany",
"model": "Foo",
"foreignKey": "widgetId"
}
}
}
{
"name": "Foo",
...
"relations": {
"bars": {
"type": "hasMany",
"model": "Bar",
"foreignKey": "fooId"
},
"widget": {
"type": "belongsTo",
"model": "Widget",
"foreignKey": ""
}
}
}
{
"name": "Bar"
...
"relations": {
"foo": {
"type": "belongsTo",
"model": "Foo",
"foreignKey": ""
}
}
}
परिणाम:
{
id: 1
foos: [
{
id: 2,
bars: [
{
id: 3
}
]
},
{
id: 2,
bars: [
{
id: 3
}
]
}
]
}
उम्मीद:
{
id: 1
foos: [
{
id: 2,
bars: [
{
id: 3
}
]
}
]
}
यह एसक्यूएल दूसरे शब्दों में बयान कर रहा है कि मैं इस अनुरोध के लिए किया जा रहा रन देखें:
SELECT `...` FROM `Widget` WHERE `id`=1 ORDER BY `id` LIMIT 1
SELECT `...` FROM `Foo` WHERE `widget_id` IN (1) ORDER BY `id`
SELECT `...` FROM `Foo` WHERE `widget_id` IN (1) ORDER BY `id`
SELECT `...` FROM `Bar` WHERE `foo_id` IN (2) ORDER BY `id`
SELECT `...` FROM `Bar` WHERE `foo_id` IN (2) ORDER BY `id`
मैं लूपबैक 3.x का उपयोग कर रहा हूं।
अद्यतन:GET /api/Widgets/1?filter={include: {"foos": "bars"}}
प्रदर्शन इस व्यवहार, पूरी तरह से Widgets.findById(id, {include: {"foos": "bars"}})
कार्यों का एक सर्वर साइड निष्पादन के लिए एक अनुरोध है। तो, फिलहाल मैं एक दूरस्थ विधि बनाउंगा जो यह करता है और शायद लूपबैक के साथ एक बग रिपोर्ट दर्ज करता है।
यदि यह सर्वर-साइड निष्पादन पर ठीक काम करता है और आप केवल एपीआई कॉल के माध्यम से डुप्लिकेट प्राप्त करते हैं, तो हो सकता है कि [लूपबैक रूट] (https://loopback.io/doc/en/lb3/Routing] में कोई समस्या हो। एचटीएमएल); एक डबल मार्ग या कुछ घोंसले वाले मार्ग इस समस्या का कारण बन सकते हैं। –
क्या आप इसे हल करते हैं? – Casy
मेरा उत्तर देखें, @ कसी, अगर आपको एक समान समस्या का सामना करना पड़ रहा है तो यह आपको सही दिशा में इंगित करने में मदद कर सकता है। धन्यवाद क्रिस्टोस, जिसने मुझे इसे हल करने में मदद की। –