如何在 CakePHP 控制器中使用多个模型

Posted

技术标签:

【中文标题】如何在 CakePHP 控制器中使用多个模型【英文标题】:How to use more than one model in a CakePHP controller 【发布时间】:2011-05-03 12:05:45 【问题描述】:

我创建了一个注册表单并将数据发送给控制器。

我想将此数据插入到 3 个不同的表(模型)中。

如何做到这一点?

【问题讨论】:

^^ -1 使用存储过程进行数据操作是非常非常错误的。您不应该在持久层中执行业务逻辑。我知道有大量的遗留应用程序完全用 SQL 实现,但这完全是错误的。 DB 只是一个存储库,作为一个存储库使用。 问题与 Cakephp 相关,因此存储过程不适用,因为您可以在模型中包含逻辑——甚至是复杂的逻辑。 MVC 的 M 部分。 【参考方案1】:

您的意思是(在 CakePHP 术语中)您想要使用比默认模型更多的模型。默认模型是与您的控制器命名的模型。

要实现您想要的,您只需在控制器中声明一个变量$uses。这样做是这样的:

<?php
class ExampleController extends AppController 
    var $name = 'Example';

    // $uses is where you specify which models this controller uses
    var $uses = array('Model1', 'Model2', 'ModelN');

    // ... here go your controller actions (methods)


?>   

这将允许您的控制器使用Model1Model2ModelN。重命名它们并根据需要添加更多内容。

如果您不想在控制器中使用模型,可以将$uses 分配给一个空数组,即:

var $uses = array();

根据你使用的版本查看对应的CakePHP书籍章节:

Cake v1.3 "Components helpers and users"Cake v2.0 controller::$uses

【讨论】:

【参考方案2】:

只要您的表单按照 CakePHP 约定进行格式化,并且模型之间的关系设置正确,这将在您调用 $this-&gt;Model-&gt;save($this-&gt;data) 时自动完成。

【讨论】:

【参考方案3】:

实际上最好动态加载模型,因为这样您就不会为您可能不需要的所有方法加载它。

$this->loadModel('Model1');

效率更高。

我还建议确保这些表没有关联。如果他们最好通过以下方式链接他们:

$this->Model1->Model2->find();

这是教您通过可包含和关系(HasMany、BelongsTo、HABTM)更高效地使用表格的开始

【讨论】:

以上是关于如何在 CakePHP 控制器中使用多个模型的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 你如何在模型中调用控制器的动作

cakePHP 保存到多个模型

在模型中使用 cakephp 组件

CakePHP 1.3 - 保存不相关模型的事务

如何使用 cakephp 3 在不同数据库中的模型之间进行关联?

如何在 CakePHP 中使用自定义 MySQL 查询?