2013-04-18 3 views
0

Я хочу добавить методы в фильме CActiveRecord, но если class Project_Model extends CActiveRecord {} получить ошибкуКак продлить CActiveRecord

В таблице «Project_ActiveRecord» для активной записи класса «Project_ActiveRecord» не может быть найдена в базе данных.

Я хочу создать простую структуру: CActiveRecord-> Project_ActiveRecord (только методы расширения) -> Таблица (реальная таблица).

Как это сделать?

ответ

0

Ошибка ясно: у вас нет таблицы с именем Project_ActiveRecord в вашей БД!

Если Project_Model будет базовой моделью для других активных моделей записи, то вы должны сделать что-то вроде:

//A base classe example that has a behavior shared by all the inherited class 
abstract class Project_Model extends CActiveRecord 
{ 

    public function behaviors(){ 
     return array(
      'CTimestampBehavior' => array(
       'class' => 'zii.behaviors.CTimestampBehavior', 
       'setUpdateOnCreate' => true 
      ), 
     ); 
    } 

} 

И тогда вы можете объявить другой класс, который будет иметь таблицу в БД:

class YourClass extends Project_Model 
{ 
    /** 
    * Returns the static model of the specified AR class. 
    * @param string $className active record class name. 
    * @return Token the static model class 
    */ 
    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 

    /** 
    * @return string the associated database table name 
    */ 
    public function tableName() 
    { 
     return 'YourClassTable'; 
    } 
    ... 
} 

Тогда вы shoudl никогда не называют класс Project_Model (вот почему я поставил ключевое слово abstract) в вашем коде, вы должны вызвать унаследованные классы, которые имеют существующую таблицу в db!

+0

Thx для быстрого ответа. – Over

Смежные вопросы