У меня проблема.
Я использую ext.ecolumns.EColumnsDialog
и когда в этих полях входит фильтр значений, он отлично работает, за исключением id. Когда вы вводите что-либо в id, то есть true или false, он получает что-то по принципу alert()
поступающего из javascript. Это предупреждение содержит текст:
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
));
Я изменил название модели и контроллер, потому что не хочу раскрывать :)
Попробуйте использовать $criteria->addCondition()
с параметром привязки вместо $criteria->compare()
следующим образом:
$criteria->addCondition("t.id=:id");
$criteria->params = array(":id"=>$this->id);
Вы можете заменить все "сравнить" с "addCondition".
Эта ошибка возникает, когда вы пытаетесь ссылаться на поле, в котором поле может принадлежать нескольким таблицам, из которых вы выбираете, из-за отсутствия имени таблицы или псевдонима перед полем.
Трудно сказать без всего запроса или без кода CDBcriteria. Я бы попытался использовать имя таблицы явно.
$criteria->compare('table_test.id', $this->id);