2012-06-15 16 views
18

में किसी भी मॉडल के बिना कोई क्वेरी चलाएं मैं एक तालिका पर एपकंट्रोलर में एक क्वेरी चलाने की कोशिश कर रहा हूं जिसमें इसके साथ कोई मॉडल संबद्ध नहीं है। मैं मॉडल कारण का उपयोग नहीं करना चाहता हूं क्योंकि यह प्रश्न हर अनुरोध पर आग लग जाएगा और मुझे लगता है कि एक मॉडल का उपयोग करके यह थोड़ा धीमा हो जाएगा।केकपीएचपी 2.1.x - AppController

मैं एक मंच में पता चला कि इस CakePHP 1.3 में

$db = ConnectionManager::getInstance(); 
$conn = $db->getDataSource('default'); 
$conn->rawQuery($some_sql); 

निम्न कोड के साथ प्राप्त किया जा सकता लेकिन इस CakePHP 2.1.3 में काम नहीं कर रहा है। किसी भी मदद की सराहना की जाएगी। धन्यवाद :)

+1

एक मॉडल doenst का उपयोग कर इसे किसी भी धीमा कर अगर आप सिर्फ एक प्रश्न (मॉडल का उपयोग करते हुए क्वेरी()) चलाने – mark

+0

वास्तव में क्या आप हर अनुरोध पर डेटाबेस से प्राप्त करने के लिए की जरूरत है? इसका मतलब यह है कि आवेदन के प्रत्येक अनुरोध के लिए डेटाबेस अनुरोध कर रहा है। इससे डीबी लोड बढ़ेगा। यदि आप कुछ कॉन्फ़िगरेशन लोड कर रहे हैं तो इसे फ़ाइल से लोड करना और इसे "ऑब्जेक्टिफाइंग" करना बेहतर हो सकता है। –

+0

इस संदर्भ में अपने एसक्यूएल-क्वेरी के डेटा को पुनः प्राप्त करने के लिए, http://stackoverflow.com/q/21612950/287948 –

उत्तर

32

getDataSource() विधि, CakePHP 2.x में स्थिर है, इसलिए आप उपयोग करने के लिए सक्षम होना चाहिए:

$db = ConnectionManager::getDataSource('default'); 
$db->rawQuery($some_sql); 
+0

धन्यवाद आदमी ... इससे मदद मिली :) –

+0

मैंने वही काम किया जो मुझे त्रुटि संदेश दिखाता है नीचे लिखा हैं। संदर्भ द्वारा केवल चर निर्दिष्ट किया जाना चाहिए। क्या आप मुझे बता सकते हैं कि मुझे अभी भी क्या बदलाव करना है? –

+4

आपको 'ऐप :: उपयोग (' कनेक्शन प्रबंधक ',' मॉडल ') की आवश्यकता हो सकती है; ' – Richard

7

आप इस तरह से

App::uses('ConnectionManager', 'Model'); 
    $db = ConnectionManager::getDataSource('default'); 
    if (!$db->isConnected()) { 
     $this->Session->setFlash(__('Could not connect to database.'), 'default',   array('class' => 'error')); 
    } else { 
     $db->rawQuery($some_sql); 
    } 
1

rawQuery नहीं लौटेगा चलाना चाहिए डेटा, इसके बजाय $ db-> क्वेरी का उपयोग करें।

$db = ConnectionManager::getDataSource('default'); 
$data = $db->query($some_sql); 
संबंधित मुद्दे