【问题标题】:Search through related model in Yii在 Yii 中搜索相关模型
【发布时间】:2013-03-01 11:46:11
【问题描述】:

我在 Yii 中搜索时遇到问题。我有两个模型:TeamsWorkers。在网站上有一个名为“Team Workers”的页面,我想在其中显示 CGridView 小部件,其中搜索显示来自团队的工人(团队 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 属性被传递并且工作正常。

怎么办?

【问题讨论】:

  • 请把代码贴在你要加入的地方。很可能是搜索方法。

标签: search yii cgridview


【解决方案1】:

Workers::search() 你有类似

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

改成

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

即,如果它来自当前模型,则带有 t. 的前缀 sql 属性,如果来自其他表/模型,则带有关系名称


也代替:

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

您可以通过以下方式使其更简单:

$workers->idTeam = $id;

【讨论】:

    【解决方案2】:

    您在TeamWorkers 中定义了idTeam 列。通过加入这些表,您将在结果中有一个重复的(“模棱两可”)列。这就是错误消息告诉您的内容。

    要解决此问题,您必须为其中一列使用别名。

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多