2012-03-06 22 views
21

我不确定现在在CakePHP 2.0中加载模型的最佳方式。在CakePHP 2.0中加载模型的最佳方式


问题1

我有一个以上的数据库字段是另一模型的模型。

customers表具有字段country_origincountry_residencecountry_study和所有这些字段包含来自表countries的ID。

所以在我的Customer模型中,我该如何加载Country模型?


问题2

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


问题3

当或为什么你必须使用一个控制器或模型App::uses()?如果你使用普通方法,比如我不明白的点当模特将反正加载loadModel()hasOnehasManybelongsTo

回答

61

这应该是简单的了解。如果您使用的是控制器,你需要加载另一个模型,您可以拨打:

$this->loadModel('SomeModel'); 

然后你就可以拨打电话到模型像通常那样:

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

App::uses是懒加载的类。所以,你可以使用用途仍然加载模型:

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

但随后你将需要以不同的方式调用它:

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

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

这只是取决于在何处以及如何想要使用它。

+5

我试图加载从行为的模型,无论是相同的插件内。在这种情况下,您必须使用:App :: uses('MyModelName','MyPluginName.Model');'在Behavior和App :: uses('MyPluginNameAppModel','MyPluginName.Model');'在称为MyModelName文件。 – colares 2012-04-02 03:20:35

+0

保存我的一天!谢谢。 – 2013-09-20 14:16:25

+0

如何在控制器中使用'public $ uses = array('Model1','Model2');'?我想知道'$ uses'是否优于'$ this-> loadModel()'。 – JadedCore 2017-01-17 16:04:11

3

的首选方式是

$this->load('MyModel'); 

但是,您也可以使用

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

蛋糕支持,你可以自由的使用你喜欢的人。

0

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

通过这样做,所以我们不希望加载模型明确

加载模型我们可以创建模型之间的关联性好,当我们不“T具有该关联我们可以使用,

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

$this->loadModel('Country'); 

如果我们想要为特定动作或条件加载模型,这将会更加有用

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

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

我们可以像访问模型,

$this->Country->find('count'); 
相关问题