क्वेरी में शामिल होने के लिए आपको ग्रुप्स टेबल की आवश्यकता है, प्रश्न में आपकी क्वेरी में कोई जॉइन नहीं है। कई सरल उपाय हैं।
पुनरावर्ती परिभाषित करें।
रिकर्सिव डिफ़ॉल्ट रूप से find('list')
जो भी जुड़ता है और क्वेरीज़ निष्पादित की जाती है, का एक बहुत ही मोटा नियंत्रण है। -1 का पुनरावर्ती मान है।
-1 का अर्थ है नो जॉइन, यही वजह है कि परिणामी क्वेरी में कोई जॉइन नहीं है। इसे 0 के मान पर सेट करने से सभी के लिए मुख्य क्वेरी में शामिल हो जाता है एक और संबंधित संघों के लिए।
रिकर्सिव का उपयोग करने/आश्रित करने से सावधान रहें क्योंकि आपको जिन जॉइन की आवश्यकता नहीं है उनके साथ क्वेरी जेनरेट करना बहुत आसान है - और/या संबंधित डेटा के लिए कई बाद के प्रश्नों को ट्रिगर करना (यदि 0 से बड़े मान पर सेट किया गया हो)।
हालांकि यह कॉल ढूंढें:
$data = $this->Soya->find('list', array(
'fields'=> array('Soya.id','Soya.username'),
'recursive' => 0, // added
'conditions' => array(
'Grupo.categoria' => 'Soya' ,
'Grupo.subcategoria' => 'Productor de Oleaginosas'
)
));
इस क्वेरी का परिणाम होना चाहिए (अगर सोया मॉडल का ग्रुपो से संबंध है):
SELECT
"Soya"."id" AS "Soya__id",
"Soya"."username" AS "Soya__username"
FROM
"public"."users" as "Soya"
LEFT JOIN
"public"."Grupos" as "Grupo" on ("Soya"."grupo_id" = "Grupo"."id")
...
Possibly more joins
...
WHERE
"Grupo"."categoria" = 'Soya'
AND
"Grupo"."subcategoria" = 'Productor de Oleaginosas'
या उपयोग करने योग्य का उपयोग करें
सम्मिलित व्यवहार बेहतर नियंत्रण की अनुमति देता है कि कौन से प्रश्न निष्पादित किए जाते हैं। प्रश्न में दी गई जानकारी का उपयोग करने के लिए इसका अर्थ है:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
आपको अपने नियंत्रक में निम्न कार्य करने की अनुमति देगा:
$data = $this->Soya->find('list', array(
'fields'=> array('Soya.id','Soya.username'),
'contain' => array('Grupo'), // added
'conditions' => array(
'Grupo.categoria' => 'Soya' ,
'Grupo.subcategoria' => 'Productor de Oleaginosas'
)
));
जो निम्नलिखित क्वेरी उत्पन्न करेगा (बिल्कुल एक जॉइन):
SELECT
"Soya"."id" AS "Soya__id",
"Soya"."username" AS "Soya__username"
FROM
"public"."users" as "Soya"
LEFT JOIN
"public"."Grupos" as "Grupo" on ("Soya"."grupo_id" = "Grupo"."id")
WHERE
"Grupo"."categoria" = 'Soya'
AND
"Grupo"."subcategoria" = 'Productor de Oleaginosas'