जब मैं स्क्वायरल में कोई क्वेरी बनाता हूं, तो यह एक क्वेरी [टी] ऑब्जेक्ट देता है। क्वेरी अभी तक निष्पादित नहीं की गई थी और जब मैं क्वेरी ऑब्जेक्ट पर पुन: प्रयास करता हूं (क्वेरी [टी] इटेबल [टी] बढ़ाता है)।स्क्वायरल: क्वेरी को स्पष्ट रूप से
किसी प्रश्न के निष्पादन के दौरान या तो लेनदेन {} या एक ट्रांज़ेक्शन {} ब्लॉक होना चाहिए।
मैं सिर्फ चयन प्रश्नों के बारे में बात कर रहा हूं और लेनदेन आवश्यक नहीं होगा, लेकिन स्क्वायरल ढांचे को उनकी आवश्यकता है।
मैं अपने आवेदन के मॉडल में एक प्रश्न बनाना चाहता हूं और इसे सीधे उस दृश्य में भेजना चाहता हूं जहां टेम्पलेट में एक दृश्य सहायक इसे डेटा देता है और डेटा प्रस्तुत करता है। यह केवल तभी संभव है जब ट्रांज़ेक्शन को {} नियंत्रक में ब्लॉक डालें (नियंत्रक में टेम्पलेट की कॉल शामिल है, इसलिए टेम्पलेट जो पुनरावृत्ति करता है वह भी अंदर है)। मॉडल में लेनदेन {} ब्लॉक डालना संभव नहीं है, क्योंकि मॉडल वास्तव में क्वेरी निष्पादित नहीं करता है।
लेकिन मेरी समझ में लेनदेन के पास नियंत्रक के साथ कुछ लेना देना नहीं है। यह मॉडल का निर्णय है जो डेटाबेस ढांचे का उपयोग करने के लिए, इसका उपयोग कैसे करें और लेनदेन का उपयोग कहां करें। तो मैं लेनदेन {} ब्लॉक मॉडल में होना चाहता हूँ।
मुझे पता है कि मैं कर सकता हूं - क्वेरी [टी] इंस्टेंस - कॉल Iterable [T] को वापस करने के बजाय। इस क्वेरी [टी] ऑब्जेक्ट पर लिस्ट करें और फिर बनाई गई सूची को वापस करें। फिर पूरी क्वेरी मॉडल में निष्पादित की जाती है और सब कुछ ठीक है। लेकिन मुझे इस दृष्टिकोण को पसंद नहीं है, क्योंकि डेटाबेस से अनुरोध किए गए सभी डेटा को इस सूची में कैश किया जाना है। मैं एक तरीका पसंद करूंगा जहां यह डेटा सीधे देखने के लिए पारित किया गया हो। मुझे परिणाम सेट स्ट्रीमिंग की MySQL सुविधा पसंद है जब यह बड़ा हो।
क्या कोई संभावना है? हो सकता है कि फ़ंक्शन क्वेरी [टी] .executeNow() जो डेटाबेस को अनुरोध भेजता है, लेनदेन को बंद करने में सक्षम है, लेकिन फिर भी MySQL स्ट्रीमिंग सुविधा का उपयोग करता है और शेष (चयनित और इसलिए निश्चित) परिणाम सेट प्राप्त करता है यह पहुंचा है? चूंकि परिणाम सेट क्वेरी के पल में तय किया गया है, लेनदेन को बंद करना कोई समस्या नहीं होनी चाहिए।
यदि आप अपना समाधान पोस्ट करेंगे तो यह अच्छा होगा, आपको एक दिलचस्प/आश्चर्यजनक खोजना चाहिए। –