2013-01-23 51 views
0

下面的Yii模型方法應該返回2個值,名稱和描述,每個記錄,而只是返回描述。當直接在MySQL中執行時,相同的查詢完美工作。 Yii是否阻止其中一個連接被執行?爲什麼yii從雙內連接的查詢中省略值?

public function reportEducation(){ 
    $criteria = array(
    'select' => " 
       concat(person.name_first," ",person.name_last), 
       group_concat(person_studylevel.description)", 
    'join' => " 
     inner join person on junior = person.id 
     inner join person_studylevel on level = person_studylevel.id", 
    'group by' => 'junior' 
); 
    return PersonEducation::model()->findAll($criteria); 
} 

這是我的查詢:它

select 
    concat(person.name_first," ",person.name_last) as name, 
    group_concat(person_studylevel.description separator ", ") 
from person_junior_education 
    left join person on junior = person.id 
    left join person_studylevel on level = person_studylevel.id 
group by junior 

部分似乎有事情做與concat_group功能,因爲如果我刪除它,它正確地顯示了描述字段。

但名稱字段永遠不會顯示。也許問題是如何處理MySQL函數?

+0

請註明查詢 –

回答

0

我不是100%確定,但可能會出現這種情況,因爲您沒有正確地調用列名稱,因爲Yii會自動使用「t」對所用模型的表進行別名。因此,如果您要引用PersonEducation模型的一列,則需要在其前加「t」。以確保你正在呼叫正確的。 如果你想改變別名,你可以使用CDbCriteria的「別名」屬性,將其設置爲像「person_education」或類似的東西。希望它有幫助

+0

沒有,這可以解決它。另外,我沒有問題的基礎表的領域的範圍。 – aelgoa

+1

您應該使用調試工具欄http://www.yiiframework.com/extension/yii-debug-toolbar/,它將向您顯示在請求期間發送給MySQL的所有查詢(只要它們未在AJAX要求當然) – Haensel

+0

漂亮!但它僅顯示查詢SQL和分析信息,而不顯示結果集或關於它們的信息 – aelgoa

1

我的建議是,不要使用CActiveRecord來處理複雜的查詢它只是沒有做到這一點,它也不是SQL的替代品。它只能在行上輕鬆地進行CRUD操作。

我想要做的是創建一個view,然後爲該視圖創建一個模型。所以你可以再簡單做:

PersonEducationView::model()->findAll(); // easy 

如果必須使用的活動記錄,則可能會創建一個在您PersonEducation模型2個屬性,使之具有一定的位置存儲查詢的結果,也更新查詢中使用別名,所以它知道哪裏來存儲它們:

// protected/models/PersonEducation.php 
    public $fullname; 
    public $description; 

    public function reportEducation(){ 
     $criteria = array(
     'select' => " 
      concat(person.name_first," ",person.name_last) AS fullname, 
      group_concat(person_studylevel.description) AS description", 
     'join' => " 
      inner join person on junior = person.id 
      inner join person_studylevel on level = person_studylevel.id", 
     'group by' => 'junior' 
     ); 
     return PersonEducation::model()->findAll($criteria); 
    } 

免責聲明:沒有經過測試的

+0

我試着用額外的屬性和別名,但沒有幫助。我結束了使用'Yii :: app() - > db-> createCommand(「」)''。作品像一個魅力:) – aelgoa

+0

哦,是的,createCommand是直接發送SQL。你也可以嘗試一下[查詢生成器](http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder#preparing-query-builder),它將事物抽象得多一點(我仍然認爲) – Asgaroth