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

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

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

如何做到这一点?

【问题讨论】:

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

标签: cakephp model controller


【解决方案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书籍章节:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      $this->loadModel('Model1');
      

      效率更高。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 1970-01-01
        相关资源
        最近更新 更多