EEavBehavior - логическая ошибка или так задумано?

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
snn
Сообщения: 7
Зарегистрирован: 2009.12.22, 21:41

EEavBehavior - логическая ошибка или так задумано?

Сообщение snn »

О таком расширении давно мечтал. Все никак руки не доходили. Классная идея. Спасибо автору.
Но вот при «сканировании» кода мне показалась логическая ошибка

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

protected function getModelTableFk() {
        // Check required property modelTableFk.
        if (empty($this->modelTableFk) || !$this->getOwner()->hasAttribute($this->modelTableFk)) {
            // If property modelTableFk not set, trying to get a primary key from model table.
            $this->modelTableFk = $this->getOwner()->getTableSchema()->primaryKey;
            if(!is_string($this->modelTableFk)) {
                throw new CException(Yii::t('yiiext', 'Table "{table}" does not have a primary key defined.',
                    array('{table}' => $this->getOwner()->getTableSchema())));
            }
        }
        return $this->modelTableFk;
    } 
Подробнее:
Получается, что если я при подключении behavior не укажу параметр modelTableFk, то класс попытается взять в качестве этого параметра номер записи в модели? Если так, то для случая уже двух моделей возникает проблема, когда ид-ишки записей начинают пересекаться. А это уже, как нетрудно догадаться, чревато последствиями.
Или я чего-то не понял?
Разъясните, плз.
ЗЫ. Если обязательным является список доп. полей, то как быть если для разных моделей с news, article (с одинаковыми полями) совпадут id? Или планируется использовать одну таблицу для одной модели? Тогда вопрос снимаю. Но было бы очень рульно, если бы можно было использовать одну таблицу для eav полей с разными моделями!!!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение slavcodev »

Этот вариант рассматривался, но при выборе, держать все в одной таблице с добавлением поля "тип модели" или держать атрибуты для каждой модели в разных таблицах, был выбран второй вариант.
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение slavcodev »

При желании и необходимости, никто не мешает тебе перегрузить этот класс.
Жду Yii 3!
snn
Сообщения: 7
Зарегистрирован: 2009.12.22, 21:41

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение snn »

Спасибо за ответ
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение Ekstazi »

Можете глянуть моё решение для еав ) viewtopic.php?f=4&t=914
snn
Сообщения: 7
Зарегистрирован: 2009.12.22, 21:41

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение snn »

Ekstazi писал(а):Можете глянуть моё решение для еав ) viewtopic.php?f=4&t=914
Спасибо! Интересное решение.

Только вот не соображу по схеме таблицу (Create table)
и 2) как делать поиск? Я так понял, что-то вроде:
array(':e_field1 = :eav_value1'),
array(':eav_value1' => 'просто значение')
так?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение Ekstazi »

1) сейчас там eav-атрибуты прописаны храниться в таблице BoardInfo. Дальше изучайте по коду. Расширение не было расчитано на продакшн, только для ознакомления.
2)$criteria=new CDbCriteria(array(
'condition'=>':eav_attr1=:param1',
'params'=>array(
':param1'=>'value1'
))
snn
Сообщения: 7
Зарегистрирован: 2009.12.22, 21:41

Re: EEavBehavior - логическая ошибка или так задумано?

Сообщение snn »

2 Ekstazi
Вы не могли поделиться схемой таблицы?
Ответить