2011-12-13 10 views
12

उत्पत्ति posted केकफ़्पी क्यू & ए पर लेकिन मैं इसे कुछ जवाब प्राप्त करने की उम्मीद में यहां रखूंगा।केकेएचपी या स्थिति

मेरे पास ऐसी कंपनियों का समूह है जिनके पास डिफ़ॉल्ट रूप से 0 की स्थिति है लेकिन कभी-कभी उच्च स्थिति प्राप्त होती है। अब मैं मौजूद होने पर उच्च स्थिति का उपयोग करना चाहता हूं लेकिन अगर नहीं तो 0 पर वापस आना। मैंने अलग-अलग दृष्टिकोणों का एक गुच्छा करने की कोशिश की है, लेकिन मुझे हमेशा स्थिति 0 के साथ या जो स्थिति मैं चाहता हूं, मुझे हमेशा स्थिति मिलती है और यदि नहीं तो 0।

मुझे केवल स्थिति मैं निर्दिष्ट देता है, मुझे स्थिति 0 के साथ लोगों को दे रही है नहीं:

'Company' => array (
    'conditions' => array (
     'OR' => array(
      'Company.status' => 0, 
      'Company.status' => $status, 
     ) 

    ) 
) 

मुझे केवल 0 की स्थिति देता है: पुन: प्राप्त करने डेटा

'Company' => array (
    'conditions' => array (
     'OR' => array(
      'Company.status' => $status, 
      'Company.status' => 0 
     ) 
    ) 
) 

स्थिति परिभाषा और कोड में:

function getCountry($id = null, $status = null) { 
    // Bunch of code for retrieving country with $id and all it's companies etc, all with status 0. 
    $status_less_companies = $this->Country->find... 

    if ($status) { 
     $status_companies = $this->Country->find('first', array(
      'conditions' => array(
       'Country.id' => $id 
      ), 
      'contain' => array(
       'Product' => array (
        'Company' => array (
         'conditions' => array (
          'OR' => array(
           'Company.status' => $status, 
           'Company.status' => 0 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    } 

    // Mergin $status_less_companies and $status_companies and returning data to flex application. 
} 

मैंने इस प्रश्न के लिए मॉडल के लिए नाम बदल दिया है और अधिक समझने के लिए, peopl ई सामान्य रूप से डरते हैं जब मैं उन्हें बताता हूं कि मैं अपने फ्लेक्स एप्लिकेशन के लिए केकफ़्पी के साथ काम करता हूं। मुझे लगता है कि इस सवाल का तर्क समझ में नहीं आता है लेकिन मेरा विश्वास है कि यह मेरे आवेदन में समझ में आता है।

धन्यवाद!

+0

क्या आप एक एसक्यूएल डंप संलग्न कर सकते हैं? (यह $ --- एलिमेंट ('sql_dump') का उपयोग करें; अपने दृश्य में, सुनिश्चित करें कि कॉन्फ़िगर करें :: डीबग> 0)। – Oldskool

+0

यह काम नहीं करेगा क्योंकि मैं अपने फ्लेक्स एप्लिकेशन के भीतर केक में कार्यों को बुला रहा हूं। प्रश्न मेरे विचार पर नहीं दिखाए जाएंगे। – eldamar

उत्तर

24

से संबंधित कर रहे हैं मैं समझ गया की है, यकीन नहीं है क्या परिणाम आप उम्मीद का कहना है । यदि आप स्थिति = 0 वाले सभी रिकॉर्ड्स को पुनर्प्राप्त करना चाहते हैं, तो आइए मान लें कि जिसकी स्थिति = 3 है, आप 'OR' के बजाय 'IN' का उपयोग कर सकते हैं। एक सरणी उदा डाल मान:

केक में, आप इस तरह इसे लिखने होगा:

$status = 3; 
$conditions = array('Company.status' => array(0, $status)); 
+0

यह उत्तर Vigronds धड़कता है। हालांकि दोनों विधियां काम करती हैं, आईएन का उपयोग करने के रूप में या अधिक उपयोग करने के रूप में अधिक कुशल है और इस प्रकार पूरा आवेदन तेजी से हो जाता है। – pudelhund

+0

ओपीएस उदाहरण में यह बेहतर हो सकता है, लेकिन एक से अधिक फ़ील्ड में फैले 'OR' के मामले में, @ विग्रॉन्ड का उत्तर दोनों मामलों के लिए काम करता है। – dKen

46

प्रयास करें

'Company' => array (
    'conditions' => array (
     'OR' => array(
      array('Company.status' => 0), 
      array('Company.status' => $status), 
     ) 

    ) 
) 

रसोई की किताब में यह सरणियों में या स्थितियों रैप करने के लिए अगर वे एक ही क्षेत्र http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions

+0

यह मुझे मेरा दूसरा उदाहरण के समान परिणाम देता है, केवल प्रत्येक कंपनी को स्थिति = 0 के साथ प्रदर्शित करता है और यदि वे मौजूद हैं तो परिभाषित स्थिति का उपयोग नहीं करते हैं। – eldamar

+0

क्या आप हमें दिखा सकते हैं कि $ स्थिति कैसे घोषित की जाती है, और डेटाबेस में कौन से मान हैं? – Vigrond

+0

कुछ अतिरिक्त जानकारी के साथ मेरा प्रश्न अपडेट किया गया, क्या यह मदद करता है? – eldamar

0

तुम भी रिकॉर्ड प्राप्त कर सके निम्न विधि का उपयोग कर $ आगमन = सरणी (1,2);

$res = $this->Model->find('all', array(      
     'conditions' =>array('Model.filedname'=>$arr), 
     'model.id' => 'desc' 
)); 

मुझे आशा है कि आपको जवाब मिलेगा।

संबंधित मुद्दे