CDbCriteria и реляционные отношения

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
kaiser Zaido
Сообщения: 21
Зарегистрирован: 2009.07.15, 13:59

CDbCriteria и реляционные отношения

Сообщение kaiser Zaido »

Есть таблица episodes, которая содержит поле serial_id. В реляционных отношениях для модели Episode указано что:

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

        function relations()
        {
            return array(
            'serial'=>array(self::BELONGS_TO,'Serial','serial_id','alias'=>'serial'),
            );
        }
 
Теперь я делаю так:

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

                $localCriteria = new CDbCriteria;
                $localCriteria->condition = ' serial_id='.$filterValue.' ';
 
И выполняю запрос к бд. Вижу ошибку:
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'serial_id' in where clause is ambiguous
В принципе я ей не удивлен :) Больше меня смущает то, что куда бы я не вставлял магическую комбинацию ??. - ничего не помогает.
Пока работает такой способ:

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

                $localCriteria = new CDbCriteria;
                $localCriteria->condition = ' episodes.serial_id='.$filterValue.' ';
 
Но очевидно что так делать плохо. Как же быть? Где надо что-то дописать?

Спасибо.
kaiser Zaido
Сообщения: 21
Зарегистрирован: 2009.07.15, 13:59

Re: CDbCriteria и реляционные отношения

Сообщение kaiser Zaido »

Хотя может в нужных местах следует просто вставить tableName() ?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: CDbCriteria и реляционные отношения

Сообщение samdark »

Что вообще требуется?
kaiser Zaido
Сообщения: 21
Зарегистрирован: 2009.07.15, 13:59

Re: CDbCriteria и реляционные отношения

Сообщение kaiser Zaido »

Да это я приделывал компонент datafilter. И столкнулся с вышеописанной проблемой, потом с еще одной.
Написал пост и выяснилось что второй проблемы в принципе и нет, т.к. это была моя ошибка, а первая решается достаточно логично - с использованием функции tableName().

Кстати если кто-то будет ставить этот компонент, то обратите внимание, что в документации просят все закинуть в папку protected/extensions . После того как я это сделал у меня никакого результата не последовало. Прописал в конфиг в перечень компонентов с указанием класса - тоже ноль (почему?).

Закинул в protected/components затем прописал:

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

    'import'=>array(
    
        'application.components.*', // почему-то этого не хватает, надо дополнительно прописывать целевую папку
                'application.components.datafilter.*',                      
    ),
 
и только тогда смог воспользоваться компонентом.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: CDbCriteria и реляционные отношения

Сообщение samdark »

import — это пути для автозагрузки. Без них класс не подгрузится и естественно работать не будет.
kaiser Zaido
Сообщения: 21
Зарегистрирован: 2009.07.15, 13:59

Re: CDbCriteria и реляционные отношения

Сообщение kaiser Zaido »

Понимаю, но я делал так (перед тем как делать то что я описал):

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

                'datafilter'=>array(
                            'class'=>'application.extensions.datafilter.CDataFilter',

                        ),
 
И так не заработало. (делал так с компонентом image и все было ок).

А после того как закинул компонент в папку components класс был опознан.
CImageComponent наследуется от CApplicationComponent, а CDataFilter от CComponent.
Что согласно идеологии Yii необходимо класть в папку components, а что в extensions ?

Почему этой строки не хватает для того чтобы подключить компонент:

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

'application.components.*'
 
выходит подпапки не обрабатываются?

И еще маленький вопросик про загрузку. Правильно ли я понимаю что Yii фреймворк подключает файлы только когда происходит вызов соответствующего компонента? А до этого лишь намечает пути? :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: CDbCriteria и реляционные отношения

Сообщение samdark »

выходит подпапки не обрабатываются?
Да.
Правильно ли я понимаю что Yii фреймворк подключает файлы только когда происходит вызов соответствующего компонента? А до этого лишь намечает пути?
Да.
Ответить