2012-03-06 15 views
21

Non sono sicuro del modo migliore per caricare i modelli in CakePHP 2.0 ora.Il modo migliore per caricare i modelli in CakePHP 2.0


Domanda 1

ho un modello in cui più di un campo di database è legato a un altro modello.

customers tabella ha i campi country_origin, country_residence e country_study e tutti quei campi contengono un ID dalla tabella countries.

Quindi, nel mio modello Cliente, come dovrei caricare il modello Paese?


Domanda 2

Ha Controller::loadModel() stati deprecati o è cattiva pratica di utilizzare questo? Come dovrei caricare un modello nel controller?


Domanda 3

Quando o perché è necessario utilizzare App::uses() in un controllore o un modello? Non capisco il punto in cui i modelli verranno caricati in ogni caso se si utilizzano i metodi normali come loadModel(), hasOne, hasMany, belongsTo, ecc

risposta

61

Questo dovrebbe essere semplice da capire. Se si utilizza un controller ed è necessario caricare un altro modello, è possibile chiamare:

$this->loadModel('SomeModel'); 

Quindi è possibile effettuare chiamate al modello, come si farebbe normalmente:

$this->SomeModel->read(null, '1'); 

App::uses è per caricamento pigro di classi. Così si può ancora caricare un modello usando usi:

App::uses('MyModel', 'Model'); 

Ma allora si avrà bisogno di chiamare in modo diverso:

$MyModel = new MyModel(); 
$MyModel->read(null, '1'); 

o

MyModel::read(null, '1'); 

dipende solo da dove e come si voglio usarlo.

+5

stavo cercando di caricare un modello da un comportamento, sia all'interno della stessa Plugin. In questo caso, è necessario utilizzare: 'App :: uses ('MyModelName', 'MyPluginName.Model');' nel comportamento e 'App :: uses ('MyPluginNameAppModel', 'MyPluginName.Model');' nel chiamato MyModelName file. – colares

+0

Salvato la mia giornata! Grazie. –

+0

E riguardo l'uso di 'public $ uses = array ('Model1', 'Model2');' nel controller? Mi piacerebbe sapere se '$ uses' è preferito su' $ this-> loadModel() '. – JadedCore

3

Il modo migliore è

$this->load('MyModel'); 

Tuttavia, è anche possibile utilizzare

public $uses = array('DefaultModel', 'MyModel'); 
. 
. 
$this->MyModel->field(...); 

torta supporta sia e si è liberi di utilizzare qualcuno che ti piace.

0

per la domanda 1

Secondo la vostra struttura v'è un'associazione tra il Cliente e Paese modello penso quindi non abbiamo bisogno di caricare il modello. Possiamo creare un'associazione virtuale per ogni id come ad esempio,

'CountryOrigin' => array(
    'className' => 'Country', 
    'foreignKey' => 'country_origin_id', 
    'dependent' => true, 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
    'limit' => '', 
    'offset' => '', 
    'exclusive' => '', 
    'finderQuery' => '', 
    'counterQuery' => '' 
) 


'CountryResidence' => array(
    'className' => 'Country', 
    'foreignKey' => 'country_residence_id', 
    'dependent' => true, 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
    'limit' => '', 
    'offset' => '', 
    'exclusive' => '', 
    'finderQuery' => '', 
    'counterQuery' => '' 
) 

In questo modo siamo in grado di creare un'associazione tra modelli in modo che non vogliamo caricare modello esplicitamente

Caricamento modello è buono quando abbiamo don 't hanno un'associazione per che possiamo usare come,

sintassi per il carico sul soggetto per singolo modello di carico

$this->loadModel('Country'); 

Questo sarà più utile se vogliamo caricare il modello per una particolare azione o condizione

Se vogliamo usare tutto il controller possiamo usare $ usa variabile Per il caricamento di più modelli.

public $uses = array('Country','OtherModel'); 

possiamo accedere modello come,

$this->Country->find('count'); 
Problemi correlati