आपको जो परिणाम मिलते हैं, वे केकपीएचपी द्वारा उत्पादित किए जाने वाले सबसे अच्छे होते हैं।
इसे सरल बनाने के लिए आपको Set::combine जो आपके सरणी को फिर से अनुक्रमित करता है।
आपको $data = Set::combine($data, '{n}.0.age', '{n}.0.COUNT(id)');
पर कॉल करना होगा।
यह सूचकांक के रूप में आयु के साथ एक सरणी लौटाएगा और मान के रूप में गिना जाएगा:
Array
(
[9] => Array
(
[COUNT(id)] => 1
)
[10] => Array
(
[COUNT(id)] => 1
)
...
)
सरणी में अतिरिक्त गहराई का कारण यह है कि केक मॉडल का उपयोग आंतरिक सरणी के लिए कुंजी के रूप में करता है यदि आप परिकलित फ़ील्ड का उपयोग नहीं कर रहे हैं, ताकि आप फ़ील्ड के रूप में कई मॉडल डाल सकें और वे अलग-अलग सरणियों में विभाजित हो जाएंगे। जब आप परिकलित फ़ील्ड का उपयोग करते हैं तो यह समान संरचना रखता है, लेकिन मॉडल को नहीं जानता है इसलिए इसे एक सामान्य सरणी में रखना होगा।
तो मान लें कि आप पुरुष/महिला के आधार पर भी समूह बनाना चाहते हैं और आपके पास User.sex फ़ील्ड है, जो परिकलित फ़ील्ड नहीं है।
$data = $this->User->find('all', array(
'fields' => array(
"User.sex"
"DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(User.dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(User.dob, '00-%m-%d')) AS age",
'COUNT(User.id) AS [count]' // n.b. you have to give aliases normally
),
'group' => 'age', 'User.sex'
));
यह वापस आ जाएगा (कुछ इस तरह):
Array
(
[0] => Array
(
[User] => Array
(
[sex] => Male
)
[0] => Array
(
[age] => 4
[count] => 1
)
)
[1] => Array
(
[User] => Array
(
[sex] => Female
)
[0] => Array
(
[age] => 10
[count] => 1
)
)
[2] => Array
(
[User] => Array
(
[sex] => Male
)
[0] => Array
(
[age] => 10
[count] => 1
)
)
)
इस प्रकार निरंतरता के लिए अतिरिक्त गहराई हमेशा बनी रहती है, भले ही आप केवल परिकलित फ़ील्ड का उपयोग करें