2012-06-21 6 views
5

Qual è la relazione o la differenza tra ActiveRecord e il modello in YII?differenza tra ActiveRecord e model() in yii?

stavo cercando di registrare is_object(CActiveRecord::model('Project')); e mi aspettavo false ma ha restituito true;

Poiché la registrazione indicava che si tratta di un oggetto, pensavo rappresentasse una riga nella tabella, ma non sono riuscito a trovare alcun attributo che rappresenti le colonne.

Anche http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail indica che restituisce un'istanza della classe CActiveRecord, ma non sono riuscito a trovare alcun valore della riga della tabella in quell'oggetto.

+0

Avendo lavorato con Yii per un paio di mesi, trovo davvero strano che la classe ActiveRecord gestisca sia ActiveRecord che il modello. Mi sembra strano. –

risposta

8

La risposta è nel tuo link di documentazione, model() è un metodo livello di classe, ed è:

Restituisce il modello statico della classe AR specificata. Il modello restituito è un'istanza statica della classe AR. Esso è fornito per invocare metodi a livello di classe

Diciamo che si fa (qualcosa di simile a metodi di classe statici.): $model=CActiveRecord::model('Project');, quindi utilizzando che $model è possibile chiamare tutti i metodi CLASSE CActiveRecord, come:

$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:

anche this post nel forum dice: (differenza tra il livello di classe e statico è riunito hods)

Classe Metodi livello sono efficacemente metodi statici, ma con il vantaggio di essere in grado di utilizzare l'ereditarietà . Cioè, puoi sovrascrivere l'operazione di un metodo di livello di classe in una sottoclasse, mentre se hai usato un metodo statico non saresti in grado di sovrascriverlo. .... Quindi, in generale, dovresti usare i metodi a livello di classe, non i metodi statici, poiché ti dà il vantaggio dell'ereditarietà anche se potrebbe sembrare un po 'strano. Quindi li chiami usando $ class :: model() -> method().

2

ActiveRecord è uno schema. Un modello per memorizzare i dati nel database relazionale. Il modello, in pattern MVC, è la parte dei dati. Quindi, Yii è un framework MVC che implementa ActiveRecord per il modello.

metodo modello è questo

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

Come si può vedere restituire un oggetto

+0

Grazie. Risposta semplice e completa – shgnInc