создание класса базовой модели в yii - PullRequest
1 голос
/ 21 февраля 2012

В моем приложении у меня есть поля, которые являются общими для всех таблиц, такие как дата создания, дата обновления и т. Д. Чтобы назначить эти значения, я использую обратный вызов beforeValidate. Теперь это callback одинаково для всех моделей.

Чтобы избежать дублирования кода, я хочу создать базовый класс модели.

Но, когда я пытался создать базовую модель, yii выдавала ошибку, говоря table cannot be found in database, что верно, поскольку у меня нет таблицы для этой базовой модели.

Можно ли как-нибудь создать базовый класс модели.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2012

Да, если вы работаете с динамической структурой БД или у вас есть другие причины работать с Yii ActiveRecord без создания классов для каждой таблицы в БД, вы можете использовать smartActiveRecord yii extension

Я отделил его несколько минут назад от моего другого расширения - поведения AR, которое добавляет версионность в любую модель (копирует все данные при вставке и обновлении в специальную таблицу (и создает ее, если она отсутствует), которая имеет ту же структуру, что и исходная таблица + «поле редакции» и первичный ключ, расширенный этим полем.

Посмотрите на Источник SmartAR.php , в комментариях есть пример использования.

1 голос
/ 21 февраля 2012

Взгляните на CTimeStampBehavior .

Если вам это не поможет, вы можете просто написать поведение класс самостоятельно.

Надеюсь, это поможет.

Редактировать:
Если вы используете ActiveRecords.

Если вы хотите создать новую базовую модель, вы можете сделать это:

abstract class MyBaseARClass extends CActiveRecord{
    protected function beforeValidate(){
            if(parent::beforeValidate()){
                    // assign your fields
                    return true;
            }
            else return false;
    }
}
0 голосов
/ 02 февраля 2014

В вашем случае вам нужно переопределить

public static function model($className=__CLASS__)
{
    return parent::model($className);
}

в каждом дочернем классе, чтобы Yii знал, какую таблицу использовать для вашей модели.В противном случае он попытается использовать базовый класс в качестве имени таблицы.

Т.е.

class User extends BaseActiveRecord {

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

}
0 голосов
/ 21 февраля 2012

Вы создали базовую таблицу? Думая о структуре Yii, может быть проще установить связь между моделью и базовой моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...