ошибка -Column is ambiguous

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

ошибка -Column is ambiguous

Сообщение kukuruku »

есть модель, сделал в defaultScope условие 'condition'=>'created<NOW()'
проблема в том, что у связных таблиц есть колонка с таким же именем, и вылетает ошибка -Column is ambiguous
если писать условие так 'condition'=>'table_name.created<NOW()' падает изза того, что yii в запросах используются генерированные алиасы для таблиц
как разрулить?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение slavcodev »

использовать алиасы, у меня от этой ошибке "Column is ambiguous" нервный тик, намучался.
пока не выработал привычку в каждой модели

Код: Выделить всё

function defaultScope(){
  return array(
     'alias'=>'какой-то псевдоним, обычно название таблицы или модели'
  );
} 
Жду Yii 3!
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: ошибка -Column is ambiguous

Сообщение RusAlex »

присоединяюсь к @mc-bear, намучался тоже, когда много связанных моделей и в каждой есть status,created,modified,type.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: ошибка -Column is ambiguous

Сообщение kukuruku »

mc-bear писал(а):использовать алиасы, у меня от этой ошибке "Column is ambiguous" нервный тик, намучался.
пока не выработал привычку в каждой модели

Код: Выделить всё

function defaultScope(){
  return array(
     'alias'=>'какой-то псевдоним, обычно название таблицы или модели'
  );
} 
подозреваю что это не единственное место, где нужно прописать алиас? потому что вываливает ошибку что не найдена колонка t.имя
в relations еще надо прописать или где?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение slavcodev »

установив алиас, теперь везде где писал алиас `t` нужно заменить на тот что в скоупе )
Жду Yii 3!
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение xoma »

а мне вот это помогает:
.... while the alias name for a relational table is the same as the corresponding relation name by default
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение slavcodev »

xoma писал(а):а мне вот это помогает:
.... while the alias name for a relational table is the same as the corresponding relation name by default
в случае ТС это не поможет, он не может в defaultScope указать условие, т.к. не всегда заранее известно имя связи с этой моделью
Жду Yii 3!
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение SpiLLeR »

Сам использую данный подход с указанием в defaultScope alias, но возникают проблемы когда используешь through. К примеру джоин самой себя и т.п.
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение slavcodev »

SpiLLeR писал(а):Сам использую данный подход с указанием в defaultScope alias, но возникают проблемы когда используешь through. К примеру джоин самой себя и т.п.
в данной связи можно указать alias другойб или он перекрывается defaultScope ?
Жду Yii 3!
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: ошибка -Column is ambiguous

Сообщение SpiLLeR »

Да, defaultScope перекрывает то что указано в relations(), но можно обойти, через указания в отношении:

Код: Выделить всё

    //model
    public function relations() {
        return array(
            'products' => array(self::HAS_MANY, 'Product', 'brand_id', 'alias'=>'wtf'),
        );
    }

    public function defaultScope() {
        return array(
            'alias' => $this->tableName(),
        );
    }

    // controller
    public function actionIndex() {
        $products = Product::model()->with(
            array(
                 'brand'=>array(
                     'with'=>array(
                         'products'=>array(
                             'alias'=>'test'
                         )
                     )
                 )
            )
        )->findAll(array('limit'=>10));
        var_dump($products[0]->brand->products[0]->title);
    } 
Если убрать  'alias'=>'test', то будет ошибка.
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: ошибка -Column is ambiguous

Сообщение RusAlex »

да , сталкиваешься с проблемой и начинаешь на автомате создавать префиксы, когда появляется много связей.
Ответить