Yii Ошибка CDbCriteria: столбец id в предложении where является неоднозначным

0

У меня проблема.

Я использую 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
        ));

Я изменил название модели и контроллер, потому что не хочу раскрывать :)

Теги:
yii

2 ответа

0

Попробуйте использовать $criteria->addCondition() с параметром привязки вместо $criteria->compare() следующим образом:

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

Вы можете заменить все "сравнить" с "addCondition".

  • 0
    К сожалению, не работает. Пожалуйста, посмотрите на edit1 :)
  • 0
    Что значит "не работает"? По-прежнему ошибка «Нарушение целостности» или другая проблема?
Показать ещё 4 комментария
0

Эта ошибка возникает, когда вы пытаетесь ссылаться на поле, в котором поле может принадлежать нескольким таблицам, из которых вы выбираете, из-за отсутствия имени таблицы или псевдонима перед полем.

Трудно сказать без всего запроса или без кода CDBcriteria. Я бы попытался использовать имя таблицы явно.

$criteria->compare('table_test.id', $this->id);
  • 0
    К сожалению, не работает. Пожалуйста, посмотрите на edit1 :)
  • 0
    Вы не должны иметь primaryKey в качестве безопасного атрибута, поскольку он никогда не должен изменяться. Судя по вашей функции поиска, вы пытаетесь получить идентификатор из формы, в которой вы ищете. Поиск по первичному ключу всегда даст только один результат, поэтому использование поискового действия для этого некорректно Теперь я предполагаю, что ошибка связана с тем, что id пуст. Решение: не ищите через id.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню