हमारे पास एक लिंक टेबल है जो एक तरफ कई प्रकार के ऑब्जेक्ट को संभाल सकती है, और मैं इन वस्तुओं में से किसी एक से हैस_मनी का उपयोग करके लिंक टेबल पर कैसे पहुंच सकता हूं।मैं एक निश्चित जॉइन स्थिति के साथ डीबीआईएक्स :: कक्षा संबंध कैसे बना सकता हूं?
उदाहरण: लिंक तालिका में शामिल हैं:
Resource->has_many(links => 'Link', 'resource_id');
लेकिन मैं इसी प्राप्त करने में सक्षम नहीं किया गया:
id link_id link_table resource_id 1 1 page 3 2 1 page 5 3 2 page 3 4 1 not_page 1
संसाधन की ओर से संबंध का निर्माण बहुत आसान है पृष्ठ की ओर से संबंध:
Page->has_many(links => 'Link', 'link_id');
not_page लिंक
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'page'});
'अमान्य rel cond वैल पेज' त्रुटि (जो मेरे लिए है कि आश्चर्य की बात नहीं थी) देता है मिलेगा।
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => '"page"'});
एक 'अमान्य रिव कंड वैल' पृष्ठ '' त्रुटि देता है। बैकस्लाश फेंकने में मदद नहीं मिली।
DBIx::Class::Relationship::Base का कहना है:
:हालत जैसे टेबल
और मैं वहाँ से विभिन्न विभिन्न विकल्पों की कोशिश की है, के बीच में शामिल होने का एक SQL::Abstract शैली प्रतिनिधित्व होने की जरूरत है
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => {'=', 'page'}});
लेकिन बिना किसी सफलता के।
अगर मैं जो हमेशा मूल्य 'पेज' में शामिल है पृष्ठ सारणी के लिए एक और क्षेत्र जोड़ा मैं
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'self.what_table_am_i'});
कर सकता है, लेकिन वह शायद ही सर्वोत्कृष्ट समाधान है।
लिंक तालिका को प्रत्येक प्रकार के लिए एक अलग में विभाजित करना एक संभावना हो सकती है, लेकिन यह एक मौजूदा परियोजना है जिसे डीबीआईएक्स :: कक्षा के अनुकूलन के लिए माना जा रहा है, और अन्य जगहें हो सकती हैं जहां एक टेबल को एकाधिक में विभाजित किया जा सकता है अन्य टेबल इसके लायक से अधिक परेशानी है।
Page->has_many(__all_links => 'Link', 'link_id');
sub links {
shift->__all_links({link_table => 'page'});
}
यह एक DBIx :: कक्षा घटक में बदलने के लिए आप एक से अधिक तालिकाओं की आवश्यकता है कि अगर बहुत आसान होगा:
आप "has_many" के दूसरे पक्ष पर "belongs_to" करना चाहते हैं? – jrockway
है_मनी अधिक महत्वपूर्ण था, इसलिए मैंने जरूरी से ज़्यादा जटिलताओं को जोड़ने के लिए चुना नहीं। मुझे उम्मीद है कि ब्रायन का जवाब संबंधित_तो मामले के लिए संशोधित करने में सक्षम है। – Cebjyre