如何在 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)
?>
这将允许您的控制器使用Model1
、Model2
和ModelN
。重命名它们并根据需要添加更多内容。
如果您不想在控制器中使用模型,可以将$uses
分配给一个空数组,即:
var $uses = array();
根据你使用的版本查看对应的CakePHP书籍章节:
Cake v1.3 "Components helpers and users" 和 Cake v2.0controller::$uses
【讨论】:
【参考方案2】:只要您的表单按照 CakePHP 约定进行格式化,并且模型之间的关系设置正确,这将在您调用 $this->Model->save($this->data)
时自动完成。
【讨论】:
【参考方案3】:实际上最好动态加载模型,因为这样您就不会为您可能不需要的所有方法加载它。
$this->loadModel('Model1');
效率更高。
我还建议确保这些表没有关联。如果他们最好通过以下方式链接他们:
$this->Model1->Model2->find();
这是教您通过可包含和关系(HasMany、BelongsTo、HABTM)更高效地使用表格的开始
【讨论】:
以上是关于如何在 CakePHP 控制器中使用多个模型的主要内容,如果未能解决你的问题,请参考以下文章