2012-06-21 15 views
5

¿Cuál es la relación o diferencia entre ActiveRecord y el modelo en YII?diferencia entre ActiveRecord y el modelo() en yii?

estaba tratando de registrar is_object(CActiveRecord::model('Project')); y esperaba false pero me devolvió true;

Dado que el registro indicó que es un objeto, pensé que representaba una fila en la tabla, pero no pude encontrar ningún atributo que representara los coloumns.

También http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail indica que está devolviendo una instancia de la clase CActiveRecord, pero no pude encontrar ningún valor de la fila de la tabla en ese objeto.

+0

Después de haber trabajado con Yii durante un par de meses, me parece realmente extraño que la clase ActiveRecord maneje tanto el ActiveRecord como el modelo. Me parece extraño. –

Respuesta

8

La respuesta está en el enlace de documentación, model() es un método de nivel de clase, y es:

Devuelve el modelo estático de la clase AR especificada. El modelo devuelto es una instancia estática de la clase AR. Se proporciona para invocar métodos de nivel de clase

Digamos que haces (algo similar a métodos estáticos de clase.): $model=CActiveRecord::model('Project');, a continuación, utilizar ese $model puede llamar a todos los métodos de nivel de clase de CActiveRecord, como:

$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 

Editar:

también this post en el foro dice: (Diferencia entre el nivel de clase y estática se reunieron hods)

Métodos nivel de clase son efectivamente métodos estáticos, pero con la ventaja de ser capaz de utilizar herencia. Es decir, puede anular la operación de un Método de nivel de clase en una subclase, mientras que si utilizó un método estático no podría sobrescribirlo. .... Por lo tanto, en general, debe utilizar métodos de nivel de clase, no métodos estáticos, ya que le da el beneficio de la herencia, aunque podría parecer un poco extraño. Luego los llamas utilizando $ class :: model() -> method().

2

ActiveRecord es un diseño. Un patrón para almacenar datos en una base de datos relacional. Modelo, en patrón MVC, es la parte de los datos. Entonces, Yii es un framework MVC que implementa ActiveRecord para el modelo.

método modelo es este

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; 
    } 
} 

Como se puede ver devolver un objeto

+0

Gracias. Respuesta simple y completa. – shgnInc

Cuestiones relacionadas