2012-06-15 25 views
18

Tôi đang cố chạy truy vấn trong AppController trên bảng không có Mô hình nào được liên kết với nó. Tôi không muốn sử dụng một mô hình gây ra truy vấn này sẽ cháy trên mọi yêu cầu và tôi đoán bằng cách sử dụng một mô hình sẽ làm cho nó một chút chậm hơn.CakePHP 2.1.x - Chạy truy vấn không có bất kỳ mô hình nào trong AppController

tôi phát hiện ra trong một diễn đàn rằng đây có thể đạt được với đoạn mã sau trong CakePHP 1,3

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

Nhưng điều này không làm việc trong CakePHP 2.1.3. Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn :)

+1

sử dụng mô hình doenst làm chậm hơn nếu bạn chỉ chạy truy vấn (sử dụng truy vấn() của mô hình) – mark

+0

Chính xác bạn cần lấy gì từ cơ sở dữ liệu theo mọi yêu cầu? Điều này cũng có nghĩa là thực hiện yêu cầu cơ sở dữ liệu cho mỗi và mọi yêu cầu đối với ứng dụng. Điều này sẽ làm tăng tải DB. Nếu bạn đang tải một số cấu hình thì tốt hơn là tải nó từ một tệp và "Objectifying" nó. –

+0

Để truy xuất dữ liệu truy vấn sql của bạn trong ngữ cảnh này, hãy xem http://stackoverflow.com/q/21612950/287948 –

Trả lời

32

Phương pháp getDataSource() là tĩnh trong CakePHP 2.x, vì vậy bạn sẽ có thể sử dụng:

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

Cảm ơn người đàn ông ... đã giúp :) –

+0

tôi đã làm điều tương tự bit cho tôi thấy thông báo lỗi được đề cập dưới đây. Chỉ các biến phải được chỉ định bằng tham chiếu. bạn có thể cho tôi biết rằng tôi vẫn phải làm gì? –

+4

Bạn có thể cần 'Ứng dụng :: sử dụng ('Trình quản lý kết nối', 'Mẫu'); 'cũng như – Richard

7

bạn nên chạy theo cách này

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 sẽ không trở lại dữ liệu, sử dụng truy vấn $ db-> thay thế.

$db = ConnectionManager::getDataSource('default'); 
$data = $db->query($some_sql); 
Các vấn đề liên quan