मुझे यकीन है कि मुझे कुछ याद आ रहा है लेकिन मुझे किताबों की दुकान एपीआई को लगातार मेरे लिए भ्रमित करने के लिए मिल गया है। , दो क्षेत्रों example1
और example2
नामितमैं Bookshelf.js के साथ मॉडल को सही तरीके से कैसे अपडेट करूं?
- मैं एक मॉडल एक आवेदन से सौंपा स्ट्रिंग प्राथमिक
serial
नामित कुंजी के साथRadio
और कहा जाता है, इस उदाहरण के प्रयोजन के लिए है: यहाँ मैं क्या करने की कोशिश कर रहा हूँ है। मैंने मॉडल परिभाषा मेंidAttribute: 'serial'
के साथ कस्टम आईडी निर्दिष्ट की है। - मैं बुक्सहेल्फ़ के साथ एक अपरिवर्तनीय प्रदर्शन करने की कोशिश कर रहा हूं (सीधे मेरे वास्तविक अनुप्रयोग में, कन्क्स के साथ नहीं, यह क्वेरी जटिल हो जाती है)।
- मुझे मिला है केस काम कर रहा है लेकिन अद्यतन करने के लिए प्रतीत नहीं होता है।
- सादगी के लिए मैं अभी लेनदेन या परमाणुता की परवाह नहीं कर रहा हूं। मैं एक आसान प्राप्त करने के लिए संतुष्ट हूं → को काम करने के लिए डालें/अपडेट करें।
और विशेष रूप से इस उदाहरण में:
- डालने पर
example1
औरexample2
निर्धारित किया है। - अद्यतन पर
example1
सेट करें औरexample2
अपरिवर्तित छोड़ दें।
तो मैं बुकशेल्फ मॉडल में कुछ इस तरह मिल गया है, एक वर्ग के रूप (यानी "स्थिर") विधि ("जानकारी" क्षेत्रों "धारावाहिक", "example1", और "example2" है):
insertOrUpdate: function (info) {
return new Radio({'serial':info.serial}).fetch().then(function (model) {
if (model) {
model.set('example1', info.example1);
return model.save({}, {
method: 'update',
patch: true
})
} else {
return new Radio({
serial: info.serial,
example1: info.example1,
example2: info.example2
}).save({}, {
method: 'insert'
})
}
}).then(function (model) {
console.log("SUCCESS");
}).catch(function (err) {
console.log("ERROR", err);
});
}
उदाहरण कॉल:
Radio.insertOrUpdate({
serial: ...,
example1: ...,
example2: ...
})
समस्या मैं में यहाँ चल रहा हूँ कि जब तक "सम्मिलित" मामले से काम करता है, "अद्यतन" मामले के साथ विफल है:
ERROR { Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where `serial` = '123223'' at line 1
कौन सा Knex डिबगिंग के साथ स्पष्ट है, चालू जहां उत्पन्न क्वेरी set
खंड याद आ रही है:
update `radios` set where `serial` = ?
अब, मैं fetch
और save
के लिए बुकशेल्फ डॉक्स पर ध्यान केंद्रित कर रहा हूँ, और मैं सोच रहा हूँ अगर मैं गलत दिशा में नेतृत्व कर रहा हूँ।
मुझे पता है कि मैं एपीआई गलत का उपयोग कर रहा हूं लेकिन मैं इसे समझ नहीं सकता।
मैं
save
के पहले पैरामीटर समझ में नहीं आता: अजीब बातें मैंने देखा की एक जोड़े/वह अपने अर्द्ध काम कर रहे राज्य में प्राप्त करने के लिए अभी करना था। यह मुझे समझ में आता है अगर स्थिरModel
की विधि थी, लेकिन यह नहीं है। यह एक उदाहरण विधि है और आपModel
कन्स्ट्रक्टर (उदा।new X(a:1).save({a:2})
मतलब ...?) पर विशेषताओं को पहले से ही पास कर सकते हैं, और आप सहेजने से पहलेset
के साथ विशेषताओं को सेट कर सकते हैं। तो मैं इसका एहसास नहीं कर सकता।मुझे विकल्प निर्दिष्ट करने के लिए प्लेसहोल्डर के रूप में{}
पास करना पड़ा।इस
forge
चीज नहीं है लेकिन मुझे यकीन है कि क्या अपने उद्देश्य है, क्योंकि आप पहले से हीModel
निर्माता (जब तक कि लेखकोंX.forge({a:1})
बनामnew X({a:1})
...? को कुछ लाभ पाया जाता है) के लिए गुण पारित कर सकते हैं नहीं कर रहा हूँ।मैंने पाया कि मैं स्पष्ट रूप से एक स्पष्ट बुकशेल्फ मोड़ की वजह से बचाने के लिए विधि निर्दिष्ट करने के लिए किया था: बुकशेल्फ
isNew()
पर विधि की अपनी पसंद के आधार है, लेकिनisNew()
हमेशाtrue
है जब आप मॉडल निर्माता, करने के लिए आईडी पारित आप जो आवेदन-निर्दिष्ट आईडी मामले में करना है। इसलिए आवेदन-निर्दिष्ट आईडी के लिए बुकशेल्फ़ हमेशा एक "डालने" करेगा क्योंकि हमेशा मॉडल "नया है" सोचता है। तो आपको विधि को "अपडेट" करने के लिए मजबूर करना होगा ... यह सिर्फ मेरे बुकशेल्फ़ भ्रम में जोड़ता है।
वैसे भी, मैं इसे ठीक से कैसे कर सकता हूं? मैं इसे कैसे सम्मिलित और अद्यतन कर सकता हूं?
अधिक महत्वपूर्ण बात यह है कि यह कहां दस्तावेज है? अच्छी भरोसे में मुझे लगता है कि यह स्पष्ट रूप से कहीं और दस्तावेज है और मैं अभी पेड़ों के लिए जंगल नहीं देख सकता, इसलिए मैं वास्तव में प्रत्यक्ष दिशा से भी अधिक दस्तावेज़ों में अनुसरण करने के लिए कुछ दिशा की सराहना करता हूं, क्योंकि मैं इसे समझने की ज़रूरत है। मैं वास्तविक विकास के बजाय बुकशेल्फ़ पर लॉट खर्च कर रहा हूं, इतना है कि मैं चाहता हूं कि मैं शुरुआत से ही एसक्यूएल प्रश्नों को प्रत्यक्ष करने के लिए अटक गया होगा।
'.save ({}, विकल्प) 'भेजकर, आप स्पष्ट रूप से बुकशेल्फ़ को एक खाली अपडेट ऑब्जेक्ट भेज रहे हैं। क्या आप इसके बजाय 'शून्य' के साथ प्रयास कर सकते हैं? अर्थात। '.save (शून्य, विकल्प)' – DeadEye