如果我真的经历了MVC方法,那么查询应该在Model中,在CakePHP情况下是Table Classes,但是当我查看Cake提供的教程和文档时,他们只是声明查询应该在Controller中
正如您在Cake网站上的示例中所见:https://book.cakephp.org/3.0/en/tutorials-and-examples/blog/part-two.html
但是,如果我通过此链接或我遇到的其他许多链接,查询部分应该在模型中:https://www.toptal.com/cakephp/most-common-cakephp-mistakes#common-mistake-3-keeping-business-logic-in-controllers-instead-of-models
不仅仅是关于Cake在示例中显示的内容还是开发人员的意见,而是在处理数据库查询时,应该在Cake中编写代码的真正方式。我发现只有90%的人在控制器中只为Cake执行查询相关的任务,因为他们引用了“Cake在他们的例子中提到的相同”。但是对于MVC方式,我们创建表类只是为了提及那些关联呢?如果Cake自己的网站做到了这一点,那么它意味着他们故意这样做了。
答案 0 :(得分:3)
在模型中使用数据库查询是一种很好的编程习惯,因为稍后可以通过使用模型对象调用方法来重用这些查询(在另一个控制器中)。但是,您也可以在Controller中编写查询。
例如: -
//Consider this code block is in Products Model
function totalActiveProduct(){
$totalProduct=$this->find('all', ['conditions'=>['is_active'=>'Y']]);
return $totalProduct;
}
如果您想在任何控制器中获取总活动产品,可以执行此操作,
$this->Categories->Products->totalActiveProduct(); //Total procuct in category controller
$this->Products->totalActiveProduct(); //Total products in Product controller.
实际上,当您在控制器中编写查询时,必须使用模型的对象(这意味着您间接使用控制器)。您正在考虑在控制器中编写此文件,但实际上,您正在模型中编写它(模型对象)。
$this->Products->find('all');
这意味着您在模型对象中写入此内容(其中Products是模型对象)。直接或间接地,您通过模型执行每个数据库操作。