मेरे पास कुछ डिफ़ॉल्ट स्थितियों के साथ परिभाषित उनके ActiveQuery के साथ कुछ मॉडल हैं।

class ProfileQuery extends \yii\db\ActiveQuery{
    public function init(){
        $this->andOnCondition(['not',[Profile::tableName().'.status'=>2]]);
        parent::init();
    }
...

समस्या यह है कि अगर किसी अन्य मॉडल खोज में मैं एक उपनाम के साथ जुड़ने का उपयोग करता हूं init() ProfileQuery का फ़ंक्शन अभी भी tablename.status खोजने की कोशिश करता है

क्या init() फ़ंक्शन के अंदर वर्तमान उपनाम प्राप्त करने का कोई तरीका है?

0
dgtal 20 फरवरी 2019, 19:12

1 उत्तर

सबसे बढ़िया उत्तर

यह अभी संभव नहीं है। सीमित उपनाम समर्थन Yii 2 की शुरुआत के बाद से समस्या थी, लेकिन हाल ही में इसे Yii 3 के लिए स्थगित कर दिया गया था और सबसे अधिक संभावना Yii 2 में तय नहीं की जाएगी: https://github.com/yiisoft/active-record/issues/33

इसे ठीक करने के कुछ प्रयास हुए, लेकिन उनमें से किसी को भी अंतिम रूप देकर विलय नहीं किया गया है। यदि आपको वास्तव में इसकी आवश्यकता है, तो आप इन पीआर से कुछ कोड का उपयोग कर सकते हैं और इसे स्वयं कस्टम घटक या कांटा में लागू कर सकते हैं:

Yii 2.0.16 से आप का भी इस्तेमाल कर सकते हैं ActiveQuery::getTableNameAndAlias() लेकिन यह संभवत: init() में बेकार होगा।

1
rob006 24 मार्च 2019, 20:02