Yii CDbCriteria错误:where子句中的列'id'不明确

时间:2015-03-08 01:32:51

标签: javascript php yii

我有一个问题。

我使用ext.ecolumns.EColumnsDialog,当在这些字段中输入值过滤器时,除了id之外,它工作正常。当您在id处键入任何内容时,无论是真还是假,它都会收到来自javascript的alert ()原则的内容。此警报包含文本:

Error 500: <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`id`) FROM `table_test` `t`  LEFT OUTER JOIN `two_table` `twotables` ON (`t`.`two_table`=`twotables`.`id`)  LEFT OUTER .....

如何修复此错误?我现在试着添加  $criteria->compare('t.id', $this->id);或类似的。

EDIT1: 我的控制器文件:

$model = new Model_name('search');

        $model->unsetAttributes();  // clear any default values

        if (isset($_GET['Model_name'])){

            $model->attributes = $_GET['Model_name'];


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

我的模型文件:

 public function search()
        {
     $criteria = new CDbCriteria;

 $criteria->addCondition("t.id=:id");
$criteria->params = array(":id"=>$this->id);
    ....

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => $sort,
            'pagination' => $pages
        ));

我更改了模型名称和控制器,因为不希望透露:)

2 个答案:

答案 0 :(得分:0)

当您尝试引用字段可能属于您要从中选择的多个表时,由于在字段之前缺少表名或别名,会引发该错误。

没有整个查询或没有所有CDBcriteria代码很难分辨。我明确地尝试使用表名。

$criteria->compare('table_test.id', $this->id);

答案 1 :(得分:0)

尝试使用$criteria->addCondition() 与绑定参数而不是$criteria->compare(),如下所示:

$criteria->addCondition("t.id=:id");
$criteria->params = array(":id"=>$this->id);

您可以替换所有&#34;比较&#34;使用&#34; addCondition&#34;。