2015-10-13 10 views
8

से केवल कुछ ही कॉलम नियंत्रक में मेरे पास है:Yii2 का चयन संबंधित मॉडल

public function actionGetItems() 
{ 
    $model = new \app\models\WarehouseItems; 
    $items = $model->find()->with(['user'])->asArray()->all(); 
    return $items; 
} 

WarehouseItem मॉडल में मैं मानक (जीआईआई द्वारा बनाई गई) संबंध घोषणा की है:

public function getUser() 
{ 
    return $this->hasOne('\dektrium\user\models\User', ['user_id' => 'user_id']); 
} 

कैसे मैं नियंत्रित कर सकते हैं जो स्तंभ डेटा "उपयोगकर्ता" संबंध से मिलता है? मुझे वर्तमान में सभी कॉलम मिलते हैं जो कि अच्छा नहीं है क्योंकि डेटा जेएसओएन प्रारूप में कोणीय को भेजा जा रहा है। अभी मुझे मुश्किल $ आइटम लूप करना है और उन सभी कॉलम को फ़िल्टर करना है जिन्हें मैं भेजना नहीं चाहता हूं।

उत्तर

12

आप बस इस तरह संबंध क्वेरी को संशोधित करना चाहिए:

$items = \app\models\WarehouseItems::find()->with([ 
    'user' => function ($query) { 
     $query->select('id, col1, col2'); 
    } 
])->asArray()->all(); 

और अधिक पढ़ें: http://www.yiiframework.com/doc-2.0/yii-db-activequerytrait.html#with()-detail

+1

मैं इस त्रुटि मिलती है: PHP सूचना - Yii \ आधार \ ErrorException अपरिभाषित सूचकांक: user_id यह क्या हो सकता है? – Ljudotina

+1

ओह, ठीक है, मुझे मिल गया .... मुझे संबंधित तालिका से "user_id" कॉलम भी चुनना है। – Ljudotina

+1

क्रम में यह काम करता है आपको संबंधित वर्ग के लिंकिंग क्षेत्र का भी चयन करना होगा। इस मामले में यह 'उपयोगकर्ता' मॉडल का' user_id' होगा: '$ query-> चुनें ('user_id, col1, col2');'। –

0

आपका कोड इस तरह से जाना चाहिए।

public function actionGetItems() 
{ 
    $items = \app\models\WarehouseItems::find() 
     ->joinWith([ 
      /* 
       *You need to use alias and then must select index key from parent table 
       *and foreign key from child table else your query will give an error as 
       *undefined index **relation_key** 
       */ 
      'user as u' => function($query){ 
       $query->select(['u.user_id', 'u.col1', 'u.col2']); 
      } 
     ]) 
     ->asArray() 
     ->all(); 

    return $items; 
} 
संबंधित मुद्दे