2012-03-06 14 views
21

No estoy seguro de la mejor manera de cargar modelos en CakePHP 2.0 ahora.La mejor manera de cargar modelos en CakePHP 2.0


Pregunta 1

tengo un modelo en el que más de un campo de base de datos está relacionado con otro modelo.

customers tabla tiene los campos country_origin, country_residence y country_study y todos esos campos contienen un ID de la tabla countries.

Entonces en mi modelo de cliente, ¿cómo se supone que debo cargar el modelo de país?


Pregunta 2

Ha sido desaprobados Controller::loadModel() o es mala práctica usar esto? ¿Cómo se supone que cargue un modelo en el controlador?


Pregunta 3

Cuándo o ¿por qué usted tiene que utilizar App::uses() en un controlador o modelo? No entiendo el punto en que los modelos se cargarán todos modos si utiliza los métodos normales como loadModel(), hasOne, hasMany, belongsTo, etc.

Respuesta

61

Esto debería ser fácil de entender. Si está utilizando un controlador y necesita cargar otro modelo, puede llamar a:

$this->loadModel('SomeModel'); 

A continuación, puede realizar llamadas al modelo de la forma habitual:

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

App::uses es para carga diferida de clases Lo que aún puede cargar un modelo utilizando usos:

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

Pero entonces usted tendrá que llamar de otra manera:

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

o

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

sólo depende de dónde y cómo se quiero usarlo

+5

yo estaba tratando de cargar una maqueta de un comportamiento, tanto dentro de la misma Plugin. En este caso, debe usar: 'App :: uses ('MyModelName', 'MyPluginName.Model');' en el Comportamiento y 'App :: uses ('MyPluginNameAppModel', 'MyPluginName.Model');' en llamado archivo MyModelName. – colares

+0

¡Me salvó el día! Gracias. –

+0

¿Qué hay de usar 'public $ uses = array ('Model1', 'Model2');' en el controlador? Me gustaría saber si '$ uses' es preferido sobre' $ this-> loadModel() '. – JadedCore

3

La forma preferida es

$this->load('MyModel'); 

Sin embargo, también se puede utilizar

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

Cake soporta tanto y usted es libre de utilizar cualquier persona que quiera.

0

para la pregunta 1

Según su estructura existe una asociación entre el Cliente y el modelo de país que pienso de modo que no es necesario cargar el modelo. Podemos crear la asociación virtual para cada ID tales como,

'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' => '' 
) 

De esta manera podemos crear una asociación entre los modelos por lo que no queremos cargar el modelo explícitamente

Cargando modelo es bueno cuando Don 't tienen una asociación para que podemos utilizar como,

sintaxis para modelo de carga es para carga solo modelo

$this->loadModel('Country'); 

Esto será más útil si queremos cargar el modelo para una acción o condición en particular

Si queremos usar todo el controlador podemos usar $ usa la variable para carga de modelos múltiples.

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

podemos acceder modelo como,

$this->Country->find('count'); 
Cuestiones relacionadas