CakePHP HABTM relationship, setting related records always adds new entry in jointable even if already exists -


यह मेरा कोड है:

  $ charities = विस्फोट (',', $ this - & gt; डेटा [ 'चैरिटी'] [ 'दान']); विदेशी मुद्रा ($ कुंजी के रूप में $ दानएं = & gt; $ दान) {$ डेटा ['चैरिटी'] [$ की] = $ दान; } $ The- & gt; ग्रुपिंग- & gt; आईडी = $ this- & gt; डेटा ['चैरिटी'] ['ग्रुपिंग_आईड']; अगर ($ this- & gt; ग्रुपिंग- & gt; सहेजें ($ डेटा)) {// महान! } Else {// ओह प्रिय}   

कोड एक्शन से होता है जो एजेएक्स द्वारा कॉल करता है। $ इस- & gt; डेटा ['चैरिटी'] ['चैरिटी'] चैरिटी मॉडल के लिए आईडी की अल्पविराम से अलग सूची है, जो एचएबीटीएम ग्रुपिंग।

कोड ठीक काम करता है, सिवाय इसके कि केक यह जांचने लगते हैं कि क्या वह दान पहले से उस समूह के साथ जुड़ा हुआ है या नहीं, इसलिए मैं सम्मिलित तालिका में कई डुप्लिकेट प्रविष्टियों के साथ समाप्त होता है। मैं देख सकता हूं कि यह बाद में एक दर्द होगा, इसलिए मैं इसे अभी प्राप्त करना चाहता हूं।

मैं क्या कर रहा हूं?

धन्यवाद

कुछ चीजें जो मैंने देखी हैं:

ए क्या $ this- & gt; डेटा ['चैरिटी'] ['चैरिटी'] सारणी कॉलम से संबंधित नाम वाली कुंजी के साथ एक सरणी है? क्योंकि foreach () पाश के अंदर, आप चाबी ले रहे हैं और उसे $ डेटा ['चैरिटी'] सरणी में डालते हैं परिणाम गलत स्वरूप हो सकता है। मॉडल सेवकों के लिए $ डेटा सरणी सामान्यतः $ डेटा ['चैरिटी'] ['NAME_OF_COLUMN1]', $ डेटा ['चैरिटी'] ['NAME_OF_COLUM2]' / /> के रूप में स्वरूपित होती है, और इसी के लिए प्रत्येक स्तंभ चाहता है बचाने होने के लिए। इसलिए, यदि चाबियाँ संख्याएं हैं, तो आप ऐसा कुछ कर सकते हैं: $ डेटा ['चैरिटी'] [0], $ डेटा ['चैरिटी'] [1] , जो गलत है। < / P>

बी। एचएबीटीएम एसोसिएशन्स अलग तरह से सहेजे गए हैं मैं क्या सिफारिश करता हूँ, यह है कि आप इस पर एक नज़र डालेंगे। मैं इस तरह एक एचएबीटीएम रिलेशनशिप को बचाता हूं (यूज़र्स और कूपन के बीच संबंधों को मानता हूं):

$ this-> डेटा ['कूपन'] = सरणी ('आईडी' = & gt; 1, कोड '=' ब्लैबा ');
$ this- & gt; डेटा [' उपयोगकर्ता '] = सरणी (' आईडी '= & gt; 33); $ $ this- & gt; कूपन- & gt; सहेजें (यह $ - & gt; डेटा, गलत);

इसलिए, जैसा कि आप देख सकते हैं, $ डेटा एरे में कॉलम + मानों के साथ विदेशी मॉडल ('उपयोगकर्ता') के नाम पर एक सबरेरा है जिसे मैं सहेजना चाहता हूं। फिर मैं इस सरणी को कूपन मॉडल में सहेजता हूं।

सी। ध्यान रखें कि केकपीएचपी हमेशा पुराने अभिलेखों को हटा देगा और नये तालिका में सम्मिलित तालिका में सम्मिलित करेगा जब यह 'अद्यतन' एचएबीटीएम संबंध होगा। इससे बचने के लिए, आप मॉडल के $ HABTM कॉन्फ़िगरेशन में 'अनूठे' फ़ील्ड को गलत पर सेट करें।

Comments