2015-07-20 45 views
1

的代碼是EventUserTypes模型leftJoin從第一個表中列返回僅

$this->find() 
     ->select(['event_usertypes.user_type_id' , 'usertypes.name']) 
     ->leftJoin('usertypes' , 'event_usertypes.user_type_id = usertypes.id') 
     ->where(['event_usertypes.event_id'=>$event_id]) 
     ->all() 

沒有錯誤exept,它只是返回第一個表 而不是連接表的列。它已經過了2個小時,並且在發生問題的時候放棄了太多精力?任何想法 ?

如果我選擇*然後返回第一個表

的所有列,如果做到這一點

select(['event_usertypes.user_type_id' , 'usertypes.name']) 

它只返回event_usertypes.user_type_id不是這個名字從連接表

請幫助我出

回答

1

嘗試做一個直接的數據庫查詢,以確保usertypes表將在您的查詢結果中可用:

$query = new \yii\db\Query; 
$query->select(['e.user_type_id', 'u.name']) 
     ->from('event_usertypes e') 
     ->leftJoin('usertypes u', 'e.user_type_id = u.id') 
     ->where(['e.event_id'=> $event_id]); 
$command = $query->createCommand(); 
$resp = $command->queryAll(); 

看看this SO question這與您的相似。這裏也是一個鏈接到Yii documentation,萬一這可能有所幫助。

+0

都能跟得上什麼也沒你爲什麼要使用'找到()'而不是'EventUserTypes ::找到改變 –

+0

()'在你的代碼? –

+0

另一個問題:你能否使用原始MySQL成功執行你想要的查詢? –

0

請嘗試這樣

$query = new \yii\db\Query; 
$query->select(['event_usertypes.user_type_id' , 'usertypes.name']) 
     ->from('event_usertypes') 
     ->leftJoin('usertypes' , 'event_usertypes.user_type_id = usertypes.id') 
     ->where(['event_id'=> $event_id])->all(); 
$query->createCommand(); 
相關問題