cakephp:如何在模型中使用find语句而不是控制器

vaa*_*ala 3 cakephp model find

我读到了关于"胖模型和瘦控制器"的概念.我当然想遵循这个概念.

现在,我的所有控制器都很胖,我的模型很瘦.我有很多在控制器中找到stmts(查询),我想转移到模型.但我不知道该怎么做.

我应该在模型的哪个函数中放置find语句?在模型中的set stmts之后,我是否可以自动在相应的视图中查看该数据?

有人可以举个例子吗?我已经通过了cakephp食谱博客样本.在那里,find stmts在控制器而不是模型中.该模型仅包含关系和验证.我还没有看到包含find stmts的模型示例.

men*_*sch 14

已给出的答案回答了您的部分问题.您可以在没有Model类声明的情况下使用find方法(因此$this->find()代替$this->Model->find()).

要遵循"胖模型,瘦模控制器"原则,您的模型应该包含应用程序的大部分业务逻辑,而控制器处理视图使用的模型中的数据.

因此,如果您希望find在模型中发生所有逻辑,则应执行以下操作.

Product.php:

<?php
  class ProductModel extends AppModel {
    //Associations, etc. go here

    function getProducts($limit=5) {
      $products = array();
      $products = $this->find('all', array('limit' => $limit));
      return $products;
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

请注意,您不能$this->set()在模型中使用,您应该在控制器中使用它:

ProductsController.php:

<?php
  class ProductsController extends AppController {
    //Components, helpers, etc. go here

    function index() {
      $products = $this->Product->getProducts(10);
      $this->set('products', $products);
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

填充$products变量(如果在数据库表中有记录)现在可以在您的视图中使用.

这是一篇很好的文章,详细介绍了Cake的概念,并且在一般的MVC菜谱中还有另外一篇.