我有一个问题。
我使用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
));
我更改了模型名称和控制器,因为不希望透露:)
答案 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;。