Cakephp 2.0 在CakePHP2.0中加载模型的最佳方法

Cakephp 2.0 在CakePHP2.0中加载模型的最佳方法,cakephp-2.0,Cakephp 2.0,我不确定现在在CakePHP2.0中加载模型的最佳方式 问题1 我有一个模型,其中多个数据库字段与另一个模型相关 customers表中有country\u origin、country\u residence和country\u study字段,所有这些字段都包含来自表country的ID 那么在我的客户模型中,我应该如何加载国家/地区模型 问题2 Controller::loadModel()是否已被弃用,或者使用它是一种不好的做法?我应该如何在控制器中加载模型 问题3 何时或为什么必

我不确定现在在CakePHP2.0中加载模型的最佳方式


问题1

我有一个模型,其中多个数据库字段与另一个模型相关

customers
表中有
country\u origin
country\u residence
country\u study
字段,所有这些字段都包含来自表
country
的ID

那么在我的客户模型中,我应该如何加载国家/地区模型


问题2

Controller::loadModel()
是否已被弃用,或者使用它是一种不好的做法?我应该如何在控制器中加载模型


问题3


何时或为什么必须在控制器或模型中使用
App::uses()
?我不明白,如果你使用正常的方法,比如
loadModel()
hasOne
hasMany
belongsTo
等,模型什么时候会加载。这应该很容易理解。如果您正在使用控制器,并且需要加载另一个模型,则可以调用:

$this->loadModel('SomeModel');
然后,您可以像通常那样调用模型:

$this->SomeModel->read(null, '1');
App::uses
用于类的延迟加载。因此,您仍然可以使用以下方法加载模型:

App::uses('MyModel', 'Model');
但是你需要用不同的方式来称呼它:

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

这取决于您想在哪里以及如何使用它。

首选方法是

$this->load('MyModel');
但是,您也可以使用

public $uses = array('DefaultModel', 'MyModel');
.
.
$this->MyModel->field(...);
Cake支持这两种功能,您可以自由使用任何您喜欢的功能。

问题1

根据您的结构,我认为客户和国家/地区模型之间存在关联,因此我们不需要加载模型。 我们可以为每个id创建虚拟关联,例如

 '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' => ''
)
通过这样做,我们可以在模型之间创建关联,所以我们不希望显式地加载模型

当我们没有可用的关联时,加载模型是好的

负载模型的语法是 对于单模型荷载

$this->loadModel('Country');
如果我们想为特定的动作或条件加载模型,这将更加有用

如果我们想在整个控制器中使用,我们可以使用$uses变量 对于多模型负载

public $uses = array('Country','OtherModel');
我们可以访问这样的模型

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

我试图从一个行为加载一个模型,都在同一个插件中。在这种情况下,您必须使用:
App::uses('MyModelName','MyPluginName.Model')
App::uses('MyPluginNameAppModel','MyPluginName.Model')在调用的MyModelName文件中。保存了我的一天!谢谢。如何使用
public$uses=array('Model1','Model2')在控制器中?我想知道
$是否优先使用
而不是
$this->loadModel()
$this->Country->find('count');