Ecto में आप इतने की तरह पुन: प्रयोज्य/composable प्रश्नों बना सकते हैं:अमृत Ecto: कई जुड़ जाता है और पुन: प्रयोज्य/composable प्रश्नों
defmodule AModel
#...
def anonymous(q), do: q |> where([am], is_null(am.user_id))
end
अधिक उदाहरण on this blog post देखें।
हालांकि, मुझे एकाधिक जॉइन का उपयोग करके समस्या का सामना करना पड़ता है।
मान लें कि हम एक स्कीमा है कि इस तरह दिखता है दो:
- AModel BModel के अंतर्गत आता है
- BModel अंतर्गत आता है CModel को
- CModel DModel को
समाधान इस में प्रस्तावित अंतर्गत आता है आलेख वास्तव में गहरे जुड़ने के साथ काम नहीं करता है:
q = DModel
|> join(:inner, [dm], cm in assoc(dm, :c_models))
|> join(:inner, [_, cm], bm in assoc(cm, :b_models))
|> join(:inner, [_, _, bm], am in assoc(bm, :a_models))
|> AModel.anonymous
प्रश्नोत्तरी कार्य पहले के रूप में (शामिल होने के लिए दूसरा) एक बाध्यकारी तालिका तर्क देते हैं। इसमें पिछले शामिल हैं और आदेश में शामिल होने के लिए दुख की बात है।
हमारे मामले में, anonymous
फ़ंक्शन प्रारंभिक तालिका को लक्षित करता है। हालांकि क्वेरी उदाहरण में, एमोडेल चौथा बाध्यकारी है ...
इस आदेश निर्भरता से छुटकारा पाने के लिए कोई विचार या तकनीकी?
संपादित करें:
मैं ब्लॉग लेखक की ओर से एक जवाब मिलता है। उसने मुझे बताया कि तालिका में स्थिति से बाइंडिंग को संभालने का कोई अन्य मूल तरीका नहीं है। उन्होंने इस तथ्य को हाइलाइट करते हुए this article भी दिया।
लेकिन भगवान के लिए, अगर आदेश केवल मामला है, तो मैं इसे नामकरण मैपिंग क्यों नहीं बना सकता जो बाध्यकारी सूचकांक के साथ नाम को जोड़ता है?
क्या यह पूछने के लिए बहुत कुछ है: पी?
यहां एक्टो रचनाकारों में से एक। यह वास्तव में हल करने के लिए एक बहुत ही कठिन समस्या है क्योंकि जब तक हम नाम बाध्यकारी बनाते हैं, तब तक संघर्षों का मौका बहुत बढ़ जाता है, विशेष रूप से क्योंकि हम शॉर्टकट का उपयोग करना पसंद करते हैं, जैसे आपने उपयोग किया है, बीएम और इसी तरह। लेकिन हम जानते हैं कि वर्तमान संबंध भी एक परेशानी है, हमारे पास इसके लिए कोई अच्छा समाधान नहीं है (अभी तक)। –
मैं बाध्यकारी सूची के ऊपर एक ओवरले बनाने की कोशिश करने के लिए सोच रहा था। 'जॉइन' बनाते समय मैं एक प्रतीक नाम दे सकता हूं जो बाध्यकारी स्थिति से मेल खाता है। फिर 'कहां' का उपयोग करके मैं आवश्यक बाध्यकारी नाम प्रदान कर सकता हूं। क्या आपको लगता है कि वर्तमान में इस तरह के मैकेनिक बनाना संभव है? मैं मोनैड-जैसे फ़ंक्शन का उपयोग कर सोच रहा था जो {query, binding_names} लौटाएगा ... – ProxyGear
मुझे नहीं लगता कि आप इसे एक्टो को बदले बिना हासिल कर पाएंगे।मैं स्थिति को दे सकता हूं, जैसा कि मुझे लगता है, 'def अनाम (q, pos) में, करें: q |> जहां ([am: pos], is_null (am.user_id)) 'लेकिन यह बदतर आईएमओ है। –