केकपीएचपी में जॉइन के साथ विधि ढूंढें
यह प्रश्न पता लगाता है कि केकपीएचपी की खोज का उपयोग करके दो तालिकाओं, संदेशों और उपयोगकर्ताओं को जोड़ने वाली क्वेरी कैसे करें तरीका। विशेष रूप से, हमें उस स्थिति के आधार पर दोनों तालिकाओं से जानकारी प्राप्त करने की आवश्यकता है जहां messages.from फ़ील्ड user.id फ़ील्ड के बराबर है, और messages.to फ़ील्ड 4 के बराबर है।
दो प्राथमिक हैं केकपीएचपी में इस जुड़ाव को प्राप्त करने के तरीके: मानक केकपीएचपी तरीके और एक कस्टम जुड़ाव का उपयोग करना। इसमें मॉडलों के बीच संबंध बनाना और नियंत्रण योग्य व्यवहार का उपयोग करना शामिल है। यहां बताया गया है:
अपने उपयोगकर्ता और संदेश मॉडल में संबंधों को परिभाषित करें:
वर्ग उपयोगकर्ता ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $hasMany = सरणी('संदेश'); } क्लास संदेश ऐपमॉडल का विस्तार करता है { सार्वजनिक $actsAs = सरणी('कंटेनेबल'); सार्वजनिक $belongsTo = सरणी('उपयोगकर्ता'); }
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
$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' ));
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3