2012-06-21 3 views
5

Каково отношение или отличие между ActiveRecord и моделью в YII?Разница между ActiveRecord и model() в yii?

Я пытался зарегистрироваться is_object(CActiveRecord::model('Project')); и ожидал false, но он вернул true;

Поскольку в журнале указано, что это объект, я думал, что он представляет строку в таблице, но я не мог найти никаких атрибутов, представляющих coloumns.

Также http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail утверждает, что он возвращает экземпляр класса CActiveRecord, но я не смог найти значения строки таблицы в этом объекте.

+0

Работая с Yii в течение пары месяцев, мне очень странно, что класс ActiveRecord обрабатывает как ActiveRecord, так и модель. Это просто странно для меня. –

ответ

8

Ответ в вашей ссылке документации, model() является метод уровня класса, и это:

Возвращает статическую модель указанного класса AR. Возвращенная модель представляет собой статический экземпляр класса AR. Он предназначен для вызова методами класса

Допустим, вы делаете (что-то похожее на статические методы класса.): $model=CActiveRecord::model('Project');, то с помощью этого $model вы можете вызвать все методы уровня класса CActiveRecord, как:

$allModels = $model->findAll(); // will give you all the models of Project 
$someModel = $model->findByPk('pkValue'); // will give you the row with primary key value = pkValue 
$model->deleteAll(); // will delete all the records of Project 
// and so on 

Edit:

Также this post в форуме говорит: (разница между уровнем класса и статической встретились HODS)

Методы уровня Класс эффективно Статические методы, но с выгодой возможность использовать наследование. То есть вы можете переопределить работу метода уровня класса в подклассе, тогда как если бы вы использовали статический метод, вы бы не смогли его переопределить. .... Итак, в общем, вы должны использовать методы уровня класса, а не статические методы, поскольку это дает вам преимущество наследования, хотя это может показаться немного странным. Затем вы вызываете их с помощью метода $ class :: model() ->().

2

ActiveRecord - это шаблон. Образец для хранения данных в реляционной базе данных. Модель, в шаблоне MVC, является частью данных. Итак, Yii - это структура MVC, которая реализует ActiveRecord для модели.

метод модели это

public static function model($className=__CLASS__) 
{ 
    if(isset(self::$_models[$className])) 
     return self::$_models[$className]; 
    else 
    { 
     $model=self::$_models[$className]=new $className(null); 
     $model->_md=new CActiveRecordMetaData($model); 
     $model->attachBehaviors($model->behaviors()); 
     return $model; 
    } 
} 

Как вы можете видеть, возвращают объект

+0

Спасибо. Простой и полный ответ. – shgnInc

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