如何从模型中调用另一个模型中的函数?我不想重复代码。
答案 0 :(得分:18)
我们可以使用Model关系在另一个模型中调用该函数。例如
$this->Model->ModelOne->find();
$this->Model->ModelOne->customFunc();
如果模型中没有关系,我们可以使用
$this->loadModel('ModelName');
在模型中使用。 在这种情况下,您可以使用
$this->ModelName->function();
直接加载该模型。
答案 1 :(得分:7)
您应该尝试在模型之间建立关系。您可以阅读许多类型的关系here ...
如果您具有上述关联,则可以使用以下方式访问相关模型:
$this->Model->OtherModel->function();
如果您的模型没有任何关联,您应该使用:
ClassRegistry::init('OtherModel')->function();
您可以在此处查看my question,我获得了很好的答案
答案 2 :(得分:2)
User App :: import()
App::import('Model','OtherModel');
$attr = new OtherModel();
$attr->Othermodelfunction();
答案 3 :(得分:0)
如果模型之间存在(直接或间接)关系,则可以调用函数:$ this-> Model1-> Model2-> ...-> Modeln-> function( );
使用bindModel
答案 4 :(得分:0)
//MessagesController - in my send() method...
$this->set('content', ClassRegistry::init('Content')->find('first', array(
'conditions' => array('Content.id' => 3)
)));
注意:这是来自我的控制器,但我很确定它也适用于模型。
答案 5 :(得分:0)
在2.x版本中,上面回答的$this->Model1->Model2
语法不起作用。在许多情况下,从其他模型调用函数是控制器的工作,而不是模型。考虑到这一点,模型方法应限于查询和更新数据,同时保持数据库的完整性。
第一种方法:使用控制器
我将使用Firm
和User
模型的示例来说明这一点,而Firm
hasMany
个用户。如果您计划在中间添加额外的控制器功能,建议使用此方法,例如设置Flash消息或cookie。
User
型号:
public function saveRegisteredUsers($user_data,$firm_id){ ... }
-
FirmsController
:
public function add(){
if($this->Firm->save($this->request->data)){
// set $this->Firm->id here
$this->loadModel('User');
$this->User->saveRegisteredUsers($this->request->data['User'],
$this->Firm->id);
// ...
}
}
第二种方法:使用模型
为此,您需要具有正确的模型关联。表名必须是users
和firms
。按照上述示例的术语,您的关系应在Firm
模型中定义为:
public $hasMany = array( 'User' => array(
'className' => 'User',
));
在User
模型中,您必须正确设置belongsTo
关联:
public $belongsTo = array(
'Firm' => array(
'className' => 'Firm',
'foreignKey' => 'firm_id',
'dependent' => false
)
);
在此之后,您可以直接从任何$this->User->saveRegisteredUsers()
模型方法中调用Firm
。
答案 6 :(得分:0)
如果您想要从许多模型调用模型函数,最好的方法是抽象对模型名称的引用($ this-> alias)并将函数放在AppModel中。然后可以在任何模型中访问它。
class AppModel extends Model{
public function myFunction($options = array(){
do some stuff with $this->alias;
}
}