"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > केकपीएचपी की खोज विधि के साथ जॉइन क्वेरी कैसे करें?

केकपीएचपी की खोज विधि के साथ जॉइन क्वेरी कैसे करें?

2024-11-02 को प्रकाशित
ब्राउज़ करें:182

How to Perform a Join Query with CakePHP\'s find Method?

केकपीएचपी में जॉइन के साथ विधि ढूंढें

यह प्रश्न पता लगाता है कि केकपीएचपी की खोज का उपयोग करके दो तालिकाओं, संदेशों और उपयोगकर्ताओं को जोड़ने वाली क्वेरी कैसे करें तरीका। विशेष रूप से, हमें उस स्थिति के आधार पर दोनों तालिकाओं से जानकारी प्राप्त करने की आवश्यकता है जहां messages.from फ़ील्ड user.id फ़ील्ड के बराबर है, और messages.to फ़ील्ड 4 के बराबर है।

दो प्राथमिक हैं केकपीएचपी में इस जुड़ाव को प्राप्त करने के तरीके: मानक केकपीएचपी तरीके और एक कस्टम जुड़ाव का उपयोग करना। इसमें मॉडलों के बीच संबंध बनाना और नियंत्रण योग्य व्यवहार का उपयोग करना शामिल है। यहां बताया गया है:

अपने उपयोगकर्ता और संदेश मॉडल में संबंधों को परिभाषित करें:

वर्ग उपयोगकर्ता ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $hasMany = सरणी('संदेश'); } क्लास संदेश ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $belongsTo = सरणी('उपयोगकर्ता'); }

  1. संबंध के आधार पर ऑटो-एसोसिएशन की सुविधा के लिए messages.from कॉलम का नाम बदलकर messages.user_id कर दें।

    class User extends AppModel {
     public $actsAs = array('Containable');
     public $hasMany = array('Message');
    }
    
    class Message extends AppModel {
     public $actsAs = array('Containable');
     public $belongsTo = array('User');
    }
  2. $यह->संदेश->ढूंढें('सभी', सरणी( 'शामिल' => सरणी('उपयोगकर्ता'), 'शर्तें' => सारणी( 'Message.to' => 4 ), 'आदेश' => 'संदेश.दिनांकसमय DESC' ));
  3. कस्टम जॉइन
    $this->Message->find('all', array(
     'contain' => array('User'),
     'conditions' => array(
         'Message.to' => 4
     ),
     'order' => 'Message.datetime DESC'
    ));
  4. वैकल्पिक रूप से, आप खोज क्वेरी के भीतर एक कस्टम जॉइन का उपयोग कर सकते हैं:

$this ->संदेश->ढूंढें('सभी', सारणी( 'जुड़ता है' => सारणी( सारणी( 'टेबल' => 'उपयोगकर्ता', 'उपनाम' => 'यूजरजॉइन', 'प्रकार' => 'आंतरिक', 'शर्तें' => सारणी( 'UserJoin.id = Message.from' ) ) ), 'शर्तें' => सारणी( 'Message.to' => 4 ), 'फ़ील्ड' => सरणी('UserJoin.*', 'Message.*'), 'आदेश' => 'संदेश.दिनांकसमय DESC' ));इस कस्टम जॉइन में, हम स्पष्ट रूप से जॉइन शर्तों को परिभाषित करते हैं और लौटाए जाने वाले फ़ील्ड का चयन करते हैं।

एक ही मॉडल में दो संबंधों का उपयोग करना
$this->Message->find('all', array(
 'contain' => array('User'),
 'conditions' => array(
     'Message.to' => 4
 ),
 'order' => 'Message.datetime DESC'
));

यदि आप एक ही मॉडल में दो संबंध स्थापित करना चाहते हैं, तो आप उन्हें निम्नानुसार परिभाषित कर सकते हैं:

वर्ग उपयोगकर्ता ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $hasMany = सरणी( 'संदेश भेजा गया' => सारणी( 'वर्गनाम' => 'संदेश', 'विदेशी कुंजी' => 'से' ), 'संदेशप्राप्त' => सारणी( 'वर्गनाम' => 'संदेश', 'विदेशी कुंजी' => 'को' ) ); } क्लास संदेश ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $belongsTo = सारणी( 'उपयोगकर्तासे' => सारणी( 'वर्गनाम' => 'उपयोगकर्ता', 'विदेशी कुंजी' => 'से' ), 'UserTo' => सारणी( 'वर्गनाम' => 'उपयोगकर्ता', 'विदेशी कुंजी' => 'को' ) ); }इन रिश्तों को परिभाषित करने के साथ, आप इस तरह एक खोज क्वेरी का उपयोग कर सकते हैं:

$this->Message->find('all', array( 'शामिल' => सरणी('उपयोगकर्तासे'), 'शर्तें' => सारणी( 'Message.to' => 4 ), 'आदेश' => 'संदेश.दिनांकसमय DESC' ));

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729175782 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3