मेरे पास कुछ डिफ़ॉल्ट स्थितियों के साथ परिभाषित उनके ActiveQuery के साथ कुछ मॉडल हैं।
class ProfileQuery extends \yii\db\ActiveQuery{
public function init(){
$this->andOnCondition(['not',[Profile::tableName().'.status'=>2]]);
parent::init();
}
...
समस्या यह है कि अगर किसी अन्य मॉडल खोज में मैं एक उपनाम के साथ जुड़ने का उपयोग करता हूं init()
ProfileQuery
का फ़ंक्शन अभी भी tablename.status
खोजने की कोशिश करता है
क्या init()
फ़ंक्शन के अंदर वर्तमान उपनाम प्राप्त करने का कोई तरीका है?
1 उत्तर
यह अभी संभव नहीं है। सीमित उपनाम समर्थन Yii 2 की शुरुआत के बाद से समस्या थी, लेकिन हाल ही में इसे Yii 3 के लिए स्थगित कर दिया गया था और सबसे अधिक संभावना Yii 2 में तय नहीं की जाएगी: https://github.com/yiisoft/active-record/issues/33
इसे ठीक करने के कुछ प्रयास हुए, लेकिन उनमें से किसी को भी अंतिम रूप देकर विलय नहीं किया गया है। यदि आपको वास्तव में इसकी आवश्यकता है, तो आप इन पीआर से कुछ कोड का उपयोग कर सकते हैं और इसे स्वयं कस्टम घटक या कांटा में लागू कर सकते हैं:
- https://github.com/yiisoft/yii2/pull/10253
- https://github.com/yiisoft/yii2/pull/0813
- https://github.com/yiisoft/yii2/pull/11646
Yii 2.0.16 से आप का भी इस्तेमाल कर सकते हैं ActiveQuery::getTableNameAndAlias()
लेकिन यह संभवत: init()
में बेकार होगा।
नए सवाल
yii2
Yii 2, Yii फ्रेमवर्क का नवीनतम संस्करण है - एक उच्च-प्रदर्शन, घटक-आधारित PHP फ्रेमवर्क