symfony1 - symfony admin filter with join -


मेरे पास एक मेज है, शीर्षक , जिसमें एक import_profile_id है। import_profile में एक bank_id है।

मेरे व्यवस्थापक में मेरे शीर्षकों की सूची पृष्ठ पर, मैं bank_id द्वारा फ़िल्टर करने की क्षमता जोड़ना चाहता हूं । हालांकि, क्योंकि शीर्षक के पास बैंक_आईडी नहीं है - इसे पाने के लिए import_profile के माध्यम से जाने की जरूरत है - मैं सिर्फ एक < कोड> बैंक_आईडी फ़ील्ड और यह काम करने की अपेक्षा करता है।

क्या कोई यह समझा सकता है कि यह कैसे करना है? निकटतम बात मैंने पाया है लेकिन मुझे नहीं लगता कि यह वास्तव में मेरी समस्या को हल करता है।

यह वर्चुअल कॉलम का उपयोग करके किया जा सकता है, जैसे आपको मिली पोस्ट। वर्चुअल कॉलम सिम्फनी द्वारा प्रदान किए गए ऑटोगनरेटेड फ़िल्टर का उपयोग करके फ़िल्टर करने के लिए एक नया मानदंड जोड़ने का एक तरीका है। यह इस तरह काम करता है:

1 - व्यवस्थापक मॉड्यूल के जनरेटर.आईएमएल पर जाएं और वर्चुअल कॉलम का नाम जोड़ दें जो कि बना और जोड़ देगा

  & lt ;! - ऐप्स / बैकएंड / मॉड्यूल / मॉड्यूल_नाव / कॉन्फ़िग / जनरेटर.इमिल - & gt; फ़िल्टर करें: [virtual_column_name, और, अन्य, फ़िल्टर, कॉलम]   

2 - अपनी lib / filter / {TableName} में FormFilter.class.php (मुझे लगता है कि आपके मामले में HeadingFormFilter होना चाहिए) आपको कॉन्फ़िगर () विधि

  सार्वजनिक फ़ंक्शन कॉन्फ़िगर करें () {// विजेट का प्रकार (बैंक नामों के साथ sfWidgetFormChoice हो सकता है) में उस वर्चुअल स्तंभ को परिभाषित करना होगा $ यह- & gt; विजेटस्किमा ['virtual_column_name'] = नया sfWidgetFormInputText (ऐरे ('लेबल' = & gt; 'वर्चुअल कॉलम लेबल')); // फ़िल्टर के लिए मान्यकर्ता का प्रकार $- >-- मान्यकर्ता स्कीमा ['virtual_column_name'] = नया sfValidatorPass (सरणी ('आवश्यक' = & gt; गलत));   

3 - उस श्रेणी के getFields () को ओवरराइड करें और फ़िल्टर फ़ंक्शन को निर्धारित करें

  सार्वजनिक फ़ंक्शन getFields () {$ fields = parent :: getFields (); // सही 'virtual_column_name' $ फ़ील्ड को फ़िल्टर करने का तरीका है ['virtual_column_name'] = 'वर्चुअल_column_name'; $ फ़ील्ड लौटें; }   

4 - अंत में आपको फ़िल्टर विधि को परिभाषित करना होगा add ... ColumnQuery पैटर्न के बाद इस पद्धति का नाम होना चाहिए, हमारे मामले में addVirtualColumnNameColumnQuery (एक खुश नाम पसंद नहीं है: पी), इसलिए

  सार्वजनिक फ़ंक्शन AddVirtualColumnNameColumnQuery ($ क्वेरी, $ फ़ील्ड, $ value) {// अपनी फ़िल्टर क्वेरी जोड़ें! // उदाहरण के लिए आपके मामले में $ rootAlias ​​= $ query- & gt; getRootAlias ​​(); $ Query- & gt; आंतरिकजोइन ($ रूटअलिअस। '.importprofile ip') - & gt; और कहाँ ('ip.bankId =?', $ मान); // $ क्वेरी वापस करने के लिए याद रखना! वापसी $ क्वेरी; }   

हो गया! आप बैंक_आईडी द्वारा फ़िल्टर जान सकते हैं।

Comments