我在Yii中搜索时遇到问题。我有两个模型:Teams
和Workers
。在网站上有一个名为“Team Workers”的页面,我想在其中显示CGridView小部件,其中搜索显示团队中的Workers(团队ID作为_GET
参数传递)。
我在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
属性被传递并且工作正常。
热门处理它?</ p>
答案 0 :(得分:1)
在 Workers :: search()中,您有类似
的内容$criteria->compare('idTeam',$this->idTeam);
将其更改为
$criteria->compare('t.idTeam',$this->idTeam);
即前缀sql属性为t.
,如果它来自当前模型或带有关系名称,如果来自其他表/模型
而不是:
$workers->attributes = array('idTeam' => $id);
你可以通过以下方式保持简单:
$workers->idTeam = $id;
答案 1 :(得分:1)
您已在idTeam
和Team
中定义了列Workers
。通过连接这些表,您将在结果中有一个重复(“模糊”)列。这就是错误消息告诉你的内容。
要解决此问题,您必须为其中一列使用别名。