php - SQL JOINs with CakePHP -


मेरे पास एक चित्र तालिका और एक सर्वर तालिका है। छवियों में एक server_id फ़ील्ड है जो आईडी फ़ील्ड में सर्वर तालिका के लिए एक विदेशी कुंजी है सर्वर तालिका में नाम नामक फ़ील्ड भी है, जो मुझे प्राप्त करना है।

यहां मेरा नियंत्रक कार्रवाई कोड है: < पूर्व> $ images = $ this- & gt; छवि- & gt; खोजें ('सभी', सरणी ('शर्तें' = & gt; सरणी ('Image.user_id' = & gt; $ this- & gt; Auth- & gt; उपयोगकर्ता ('आईडी')), 'ऑर्डर' = & gt; सरणी ('Image.uploaded DESC'))); $ इस- & gt; सेट ('चित्र', $ चित्र);

इस तरह से डेटा प्राप्त होता है:

  सरणी ([0] = & gt; सरणी ([छवि] = & gt; सरणी ([आईडी] = & gt ; 103 [orig_name] = & gt; शीर्षक रहित- 5.jpg [हैश] = & gt; MnfWKk [फाइलनाम] = & gt; MnfWKk.jpg [अपलोड किए गए] = & gt; 2012-07-12 00:09:08 [दृश्य] = & gt ; 0 [album_id] = & gt; [user_id] = & gt; 15 [server_id] = & gt; 1)))   

server_id के बजाय, मैं चाहता हूं सर्वर तालिका से नाम फ़ील्ड प्राप्त करें मैं यह कैसे प्राप्त करने के लिए अपना find () विधि का अनुकूलन कर सकता हूं? मुझे पता है कि यह एक एसक्यूएल सम्मिलित है, लेकिन मुझे कोई पता नहीं है कि कैसे केक को सर्वर नाम पाने के लिए एक करने के लिए कहें।

धन्यवाद।

TLDR:

सही सेट अप करें, और उपयोग करें। (साथ -1)।

लंबे समय तक विवरण:

अपने खोज कोड को मॉडल में रखने के लिए सबसे अच्छा अभ्यास है, इसलिए मैं जो दिखाऊंगा , लेकिन निस्संदेह (अगर आपको चाहिए) इसे नियंत्रक में वापस ले जाने के लिए।

इसे इस तरह से करने से आप किसी भी नियंत्रक से समान getImages () फ़ंक्शन कॉल कर सकते हैं, और बस आप जो लौट आएंगे उसके आधार पर अलग-अलग पैरामीटर निकाल दें इस तरह कोडिंग के लिए लाभ यह है, आप हमेशा जानते हैं कि क्या आप क्वेरी / डेटाबेस से संबंधित कोड की खोज कर रहे हैं, आपको मॉडल में दिखना चाहिए। यह बहुत फायदेमंद होता है जब अगले व्यक्ति जो आपके कोड को देखता है, उसे खोजना नहीं पड़ता है।

छवि और सर्वर के बीच स्थापित होने वाली संस्था के कारण, आप तब पूछ सकते हैं जब आप क्वेरी में सर्वर की जानकारी "शामिल" कर सकते हैं इमेजिस। लेकिन - जब तक आप निर्दिष्ट नहीं करते कि आप अपने मॉडल को $ actAs = array ('containable') चाहते हैं, तब तक "शामिल" का उपयोग नहीं कर सकते हैं;

अंत में, आपके ऐप मॉोडल में, $ recursive = -1; सेट करने के लिए यह अच्छा अभ्यास है। यह सभी मॉडल के लिए -1 पर डिफ़ॉल्ट बनाता है यदि किसी कारण के लिए आप ऐसा करने के खिलाफ हैं, तो सुनिश्चित करें कि आप कब तक उपयोग किए जाने वाले किसी भी समय -1 के लिए पुनरावर्ती सेट करना सुनिश्चित करें। और - जब आप कंटेबल उपयोग करने के लिए सीखते हैं, तो आप कभी भी पीछे नहीं देखेंगे - यह शानदार है आप बहुत कुछ कर सकते हैं

कोड:

  // AppModel ******* // ... $ पुनरावर्ती = -1; // ... // छवियाँ नियंत्रक ******* // ... सार्वजनिक समारोह जो कुछ भी () {$ opts = array (); $ विकल्प ['उपयोगकर्ता'] = $ this- & gt; प्राधिकृत- & gt; उपयोगकर्ता ('आईडी'); $ छवियों = $ इस- & gt; छवि- & gt; getImages ($ opts); $ इस- & gt; सेट (कॉम्पैक्ट ( 'चित्र')); } // ... // छवि मॉडल ******* // ... सार्वजनिक $ worksAs = array ('containable'); सार्वजनिक हैसियत = सरणी ('सर्वर'); सार्वजनिक फ़ंक्शन getImages ($ opts = array ()) {$ params = array ('condtions' = & gt; सरणी ()); // विशिष्ट उपयोगकर्ता अगर (खाली ($ विकल्प ['उपयोगकर्ता'])) {array_push ($ params ['conditions'], सरणी ('Image.user_id' = & gt; $ opts ['user'])}} / / $ $ आदेश [] 'आदेश'] = 'छवि। डीईएससी अपलोड'; यदि (! खाली ($ विकल्प ['ऑर्डर'])) {$ params ['opts'] = $ opts ['order'];} / / $ $ पररम ['शामिल'] = सरणी ('सर्वर'); // नियंत्रक को डेटा वापस देता है- $ --- ('सभी', $ पैरामीटर);}   

कुछ अन्य नोट

  • आपको अपने सर्वर मॉडल में एसोसिएशन को भी सेट करना चाहिए।
  • मैंने दिया कोड उदाहरण काफी लिखा गया है (जैसे कि एक शब्द है?)। जैसा कि आप फिट दिखते हैं, इसके लिए स्वतंत्र महसूस करें
  • आप मॉडल की मिलीग्राम () विधि का विस्तार कर सकते हैं जैसे कि खोज, सीमा ... आदि को अनुकूलित करें। यह सब आप चाहते हैं - यह ऐसा करने का तरीका नहीं है - जो कि मैं आमतौर पर उपयोग करता हूं।
  • अपने प्रश्न के अनुसार, अगर आपको केवल एक फ़ील्ड की ज़रूरत होती है, तो आप "शामिल" में निर्दिष्ट कर सकते हैं जो आपको फ़ील्ड करता है चाहते हैं - विवरण के लिए पुस्तक देखें।
  • यह अब भ्रामक लग सकता है, लेकिन यह SO है हे सामान कैसे ठीक करें, इसके बारे में सीखने लायक - यह आपके जीवन को आसान बना देगा।

Comments

Popular posts from this blog

java - NullPointerException for a 2d Array -

python - Assemble mpeg file unable to play in mediaplayer -

c# - NameSpace Manager or XsltContent to parse aspx page -