2012-06-15 11 views
18

Próbuję uruchomić kwerendę w AppController na tabela, która nie ma skojarzony z nim Model. Nie chcę używać modelu, ponieważ zapytanie to uruchamiałoby się przy każdym żądaniu i myślę, że użycie Modelu spowolniłoby działanie.CakePHP 2.1.x - Uruchom zapytanie bez żadnych modeli w AppController

znalazłem w jednym forum, że można to osiągnąć za pomocą następującego kodu w CakePHP 1.3

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

Ale to nie działa w CakePHP 2.1.3. Każda pomoc będzie doceniona. Thanks :)

+1

stosując model doenst zrobić to wolniej, jeśli tylko uruchomić kwerendę (za pomocą zapytania() modelu) – mark

+0

Co dokładnie trzeba zrobić, aby dostać się z bazą danych na każde żądanie? Oznacza to również wykonanie żądania bazy danych dla każdego żądania do aplikacji. Zwiększyłoby to obciążenie bazy danych. Jeśli ładujesz jakąś konfigurację, lepiej ją wczytać z pliku i "zinterpretować". –

+0

Aby pobrać dane sql-zapytania w tym kontekście, zobacz http://stackoverflow.com/q/21612950/287948 –

Odpowiedz

32

Sposób getDataSource() jest statyczna w CakePHP 2.x, więc powinieneś być w stanie używać:

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

Dzięki człowieku ... to pomogło :) –

+0

Zrobiłem to samo, trochę pokazuje mi komunikat o błędzie, który jest wspomniane poniżej. Tylko zmienne powinny być przypisane przez odniesienie. czy możesz mi powiedzieć, jakie zmiany wciąż muszę zrobić? –

+4

Możesz potrzebować 'App :: uses ('ConnectionManager', 'Model');' oraz – Richard

7

należy uruchomić w ten sposób

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 nie wróci danych, zamiast tego użyj zapytania $ db-> query.

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