2014-10-11 13 views
8

मैं केकेपीएचपी 3 का उपयोग कर रहा हूं, मुझे एकाधिक तालिकाओं पर कच्ची SQL क्वेरी चलाने की आवश्यकता है। केकेपीएचपी 2 में, यह किसी भी मॉडल ($this->Messages->query("select..")) पर क्वेरी() विधि का उपयोग करके किया जा सकता है।केकेपीएचपी 3 रॉ एसक्यूएल क्वेरी

$aumTable = TableRegistry::get('Messages'); 
$sql = "SELECT (SELECT COUNT(*) FROM `messages`) AS `Total_Count`, 
     (SELECT COUNT(*) FROM `messages_output`) AS `Total_Output_Count`, 
     (SELECT COUNT(*) FROM `messages_output` WHERE `is_success`=1) AS `Total_Successful_Output_Count`, 
     (SELECT COUNT(*) FROM `messages_output` WHERE `is_success`=0) AS `Total_Error_Output_Count`, 
     (SELECT COUNT(*) FROM `users`) AS `Total_User_Count`;"; 

// to run this raw SQL query what method should i use? query() doesn't work.. 
// $result = $aumTable->query($sql); ?? 
// $result = $aumTable->sql($sql); ?? 

आप 3 मॉडल प्रलेखन CakePHP के लिए लिंक प्रदान कर सकते हैं जहाँ मैं कर सकते हैं:

मैं विधि है कि मुझे CakePHP 3. बाद में एक एसक्यूएल क्वेरी चलाने के लिए अनुमति देता है कोड का टुकड़ा मैं उपयोग कर रहा हूँ की जरूरत है यह जानकारी पाएं, यह भी सहायक होगी। मैं गूगल पर खोज की कोशिश की लेकिन केवल आप ConnectionManager जोड़ने की जरूरत है CakePHP 2.

+3

** http की तरह कुछ के साथ अपने एसक्यूएल निष्पादित ttp: //book.cakephp.org/3.0/en/orm/database-basics.html#database-queries** – ndm

+0

धन्यवाद। उत्तर है: कच्चे एसक्यूएल प्रश्नों को चलाने के लिए हमें टेबल रजिस्ट्री के बजाय कनेक्शन प्रबंधक का उपयोग करने की आवश्यकता है। – Ananth

उत्तर

21

पहले से संबंधित प्रश्नों के मिल सकता है:

// my_connection is defined in your database config 
$conn = ConnectionManager::get('my_connection'); 
:

use Cake\Datasource\ConnectionManager; 

तो फिर तुम तो जैसे अपने कनेक्शन प्राप्त करने की आवश्यकता

और जानकारी:

0: http://book.cakephp.org/3.0/en/orm/database-basics.html#creating-connections-at-runtime

उसके बाद आप इस तरह एक कस्टम क्वेरी चला सकते हैं

$stmt = $conn->execute('UPDATE posts SET published = ? WHERE id = ?', [1, 2]); 

और जानकारी: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-queries

और फिर आप पंक्ति (यों) इस तरह लाने के लिए तैयार हैं:

// Read one row. 
$row = $stmt->fetch('assoc'); 

// Read all rows. 
$rows = $stmt->fetchAll('assoc'); 

// Read rows through iteration. 
foreach ($rows as $row) { 
    // Do work 
} 

और जानकारी: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-fetching-rows

9

इस के लिए प्रलेखन यहाँ है: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-queries

लेकिन यह नहीं लिखा गया है कि इसे कैसे कार्यान्वित किया जाए। क्योंकि यह मुझे थोड़ी देर के खर्च, यहाँ उस के लिए हल है:

1.You

use Cake\Datasource\ConnectionManager; 

जोड़ने की जरूरत है 2.init ConnectionManager (जैसा कि ऊपर उल्लेख)

$conn = ConnectionManager::get('my_connection'); 

3। //book.cakephp.org/3.0/en/orm/database-basics.html#managing-connections**> ** ज: इस

$firstName = $conn->execute('SELECT firstname FROM users WHERE id = 1'); 
+3

// एक पंक्ति पढ़ें। $ पंक्ति = $ firstName-> fetch ('assoc'); // सभी पंक्तियां पढ़ें। $ पंक्तियां = $ firstName-> fetchAll ('assoc'); // पुनरावृत्ति के माध्यम से पंक्तियां पढ़ें। foreach ($ पंक्तियों के रूप में $ पंक्तियां) { // कार्य करें } –

+1

यह पूरा करने के लिए अच्छा संकेत! –