2013-03-01 31 views
1

我在Yii搜索時遇到問題。我有兩個型號:TeamsWorkers。在網站上有一個名爲「團隊工作人員」的頁面,我想在其中顯示CGridView小部件,其中顯示了來自團隊的工作人員(團隊ID作爲_GET參數傳遞)。在Yii中搜索相關模式

TeamsController這樣做:

public function actionWorkers($id) 
{ 
    $model = Teams::model()->findByPk($id); 
    $workers = Workers::model(); 
    $workers->unsetAttributes(); 
    if(isset($_GET['Workers'])) 
    { 
     $_GET['Workers']['idTeam'] = $id; 
     $workers->attributes = $_GET['Workers']; 
    } 
    else { 
     $workers->attributes = array('idTeam' => $id); 
    } 

    $teamWorkers = $workers; 
    $this->render('workers', array(
     'model' => $model, 
     'teamWorkers' => $teamWorkers 
    )); 
} 

並在視圖文件:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'team-workers-grid', 
'dataProvider'=>$teamWorkers->search(), 
'filter' => $teamWorkers, 
'columns'=>array(
    'name', 
    'surname', 
    array(
     'id' => 'idWorker', 
     'class' => 'CCheckBoxColumn', 
     'checked' => '$data->confirmer', 
     'selectableRows' => '2', 
     // 'headerTemplate' => '{item}' 
    ) 
), 
)); ?> 

我得到了錯誤:

CDbCommand nie zdołał wykonać instrukcji SQL: SQLSTATE[23000]: Integrity constraint 
violation: 1052 Column 'idTeam' in where clause is ambiguous. The SQL statement 
executed was: SELECT COUNT(DISTINCT `t`.`idWorker`) FROM `workers` `t` LEFT OUTER JOIN 
`teams` `Team` ON (`t`.`idTeam`=`Team`.`idTeam`) WHERE ((idTeam=:ycp0) AND (Team.name 
LIKE :ycp1)) 

當我不設置idTeam屬性 - 它工作正常。這很奇怪 - 在常規CRUD admin頁面 - idTeam屬性被傳遞並且工作正常。

熱點處理呢?

+0

請發佈代碼,你正在做的加入。最有可能的搜索方法。 – Kai 2013-03-01 13:15:41

回答

1

工人::搜索()您有類似

$criteria->compare('idTeam',$this->idTeam); 

將其更改爲

$criteria->compare('t.idTeam',$this->idTeam); 

即前綴SQL與t.屬性,如果它是從目前的模式或關係名如果來自其他表格/型號


也代替:

$workers->attributes = array('idTeam' => $id); 

yould能保持它簡單:

$workers->idTeam = $id; 
1

你在TeamWorkers定義的列idTeam。通過加入這些表格,結果中可能會出現重複(「模棱兩可」)列。這就是錯誤信息告訴你的。

要解決這個問題,您必須爲其中一列使用別名。