2012-06-15 12 views
18

Sto tentando di eseguire una query in AppController su una tabella che non ha alcun Modello associato. Non voglio utilizzare un modello perché questa query si attiva in ogni richiesta e suppongo che l'utilizzo di un modello lo renderebbe un po 'più lento.CakePHP 2.1.x - Esegui una query senza alcun modello in AppController

ho scoperto in un forum che questo può essere raggiunto con il seguente codice in CakePHP 1,3

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

Ma questo non sta lavorando in CakePHP 2.1.3. Qualsiasi aiuto sarebbe apprezzato. Grazie :)

+1

utilizzando un modello doenst renderlo più lentamente se si esegue solo una query (utilizzando query() del modello) – mark

+0

Che cosa avete bisogno per ottenere dalla banca dati su ogni richiesta? Ciò significa anche eseguire una richiesta di database per ogni richiesta all'applicazione. Ciò aumenterebbe il carico del DB. Se stai caricando alcune configurazioni, potrebbe essere meglio caricarlo da un file e "Objectifying". –

+0

Per recuperare i dati di sql-query in questo contesto, vedere http://stackoverflow.com/q/21612950/287948 –

risposta

32

Il metodo getDataSource() è statico in CakePHP 2.x, così si dovrebbe essere in grado di utilizzare:

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

Grazie amico ... che ha aiutato :) –

+0

ho fatto la stessa cosa bit mi mostra il messaggio di errore che è menzionato sotto. Solo le variabili dovrebbero essere assegnate per riferimento. puoi dirmi che cosa cambia ancora devo fare? –

+4

Potrebbe essere necessario 'App :: uses ('ConnectionManager', 'Model');' pure – Richard

7

si dovrebbe eseguire questo modo

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 non tornerà dati, usa invece $ db-> query.

$db = ConnectionManager::getDataSource('default'); 
$data = $db->query($some_sql);