在哪里添加查询?在Cakephp的模型或控制器中

时间:2013-06-30 18:29:58

标签: cakephp cakephp-2.0 cakephp-2.1

我正在开发一个Cakephp 2.x ..我已经看了很多教程和阅读文档......但我没有得到一件事......我已经看到在一些教程中他们在模型中编写查询和一些他们在控制器中编写所有东西,模型保持干净,除了他们添加验证规则等...我现在编码的方式就是那样

   class ContactsController extends AppController{

  public function index(){
    $this->layout='default';

    $id = $this->Auth->user('idUser');
    $data= $this->Contact->find('all',array(
        'conditions' => array('Contact.User_id' => $id)));
    $this->set('contacts',$data);

}

}

我在控制器中写了 find 函数。我在一些教程中看到过他们在模型类中编写了这个函数然后在Controller中调用它...所以我想问一下什么是最好的方式或者什么是实际的标准方式?我应该在控制器中编写所有代码并在模型中只编写验证规则吗?我应该如何编码,以便我的代码看起来干净,易于管理

2 个答案:

答案 0 :(得分:3)

您希望在模型中进行查询有几个原因:

  • 数据处理和提取是MVC模式中的明确模型任务
  • 如果在控制器中完成查询,则无法重复使用查询,简单示例是您要从shell和控制器执行某些操作。
  • 模型比控制器更容易进行单元测试
  • 如果您需要更改查询,请在一个模型中执行,而不是10个可能执行相同查询或方法的控制器。

例如,检查控制器的view()方法和模型

其他方法相同。只需检查模型中的代码数量以及控制器中的数量,并尝试了解原因。

其他人在这里说的是错误的:在控制器中进行查询显然是 no 标准。

答案 1 :(得分:1)

我不同意Arkheart。我想你应该把它放在模型中。然后,您的模型基本上成为控制器的数据API。您可以更清晰地分离问题。到底是什么?您的模型将包含更多方法。所以呢。