我可以在CakePHP中的不同模型中使用一个模型吗?

use*_*non 55 cakephp

我可以在一个模型中使用另一个模型吗?

例如.

<?php
class Form extends AppModel
{
    var $name='Form';
    var $helpers=array('Html','Ajax','Javascript','Form');
    var $components = array( 'RequestHandler','Email');

    function saveFormName($data)
    {
        $this->data['Form']['formname']=$data['Form']['formname'];
        $this->saveField('name',$this->data['Form']['formname']);
    } 

    function saveFieldname($data)
    {
        $this->data['Attribute']['fieldname']=$data['Attribute']['fieldname'];
    }

}
?>
Run Code Online (Sandbox Code Playgroud)

JCo*_*ton 119

旧线程,但我会打电话,因为我相信答案是不完整的,缺乏"为什么".CakePHP有三种加载模型的方法.虽然只有两种方法在Controller之外工作,但我会提到这三种方法.我不确定版本的可用性,但这是核心内容,所以我相信它们会起作用.

App::import()只查找和查找require()文件,您需要实例化该类才能使用它.您可以告诉import()类的类型,名称和文件路径详细信息.

ClassRegistry::init()加载文件,将实例添加到对象映射并返回实例.这是加载某些东西的更好方法,因为它设置了"蛋糕"的东西,如果你通过正常方式加载类就会发生这种情况.您还可以为我发现有用的类名设置别名.

Controller::loadModel()使用ClassRegistry::init()以及将Model添加为控制器的属性.它还允许$persistModel在将来的请求上进行模型缓存.这仅适用于Controller,如果是你的情况,我会先使用这种方法.

  • 由gwoo自己解释的一组类似的陈述:http://groups.google.com/group/cake-php/msg/794c451038c0c798 (2认同)
  • 请注意这些答案不再适用于CakePHP v3 + (2认同)

ink*_*dmn 26

您可以使用这两种方法之一从任何模型/控制器中创建其他模型的实例.

如果你正在使用Cake 1.2:

App::import('model','Attribute');
$attr = new Attribute();
$attr->save($dataYouWantToSavetoAttribute);
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Cake 1.1:

loadModel('Attribute');
$attr = new Attribute();
$attr->save($dataYouWantToSavetoAttribute);
Run Code Online (Sandbox Code Playgroud)

  • App :: import()对模型不是很好.应使用$ attr = ClassRegistry :: init('Attribute'). (10认同)

Bra*_*och 15

每个人错过的一个明显的解决方案是在适当的情况下在两个模型之间创建关联 您可以使用它来从另一个模型中引用一个模型.

class Creation extends AppModel {
    public $belongsTo = array(
        'Inventor' => array(
            'className'  => 'Inventor',
            'foreignKey'  => 'inventor_id',
        )
    );

    public function whoIsMyMaker() {
        $this->Inventor->id = $this->field('inventor_id');
        return $this->Inventor->field('name');
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 11

在CakePHP 1.2中,最好使用:

ClassRegistry::init('Attribute')->save($data);
Run Code Online (Sandbox Code Playgroud)