Dee*_*yal 5 php model-view-controller cakephp cakephp-3.0
如果我真的使用了MVC方法,那么查询应该在模型中,对于CakePHP,查询应该在表类中,但是当我浏览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-在控制器中保持业务逻辑而不是模型
这不仅与Cake在示例中显示的内容或某些开发人员的意见有关,而且在处理数据库查询时真正应该是在Cake中进行编码的真正方法是什么。我发现几乎90%的人只在Controller中为Cake执行与查询相关的任务,因为他们引用“ Cake在示例中提及的内容相同”。但是关于MVC方式,我们创建表类只是为了提及关联呢?如果Cake自己的网站做到了,那么就意味着他们有意做到了。
在模型中使用数据库查询是一种很好的编程实践,因为稍后可以通过使用模型对象调用方法来重用这些查询(在另一个控制器中)。但是,您也可以在控制器中编写查询。
例如:-
//Consider this code block is in Products Model
function totalActiveProduct(){
$totalProduct=$this->find('all', ['conditions'=>['is_active'=>'Y']]);
return $totalProduct;
}
Run Code Online (Sandbox Code Playgroud)
如果您想获得任何控制器中的总活跃产品,您可以这样做,
$this->Categories->Products->totalActiveProduct(); //Total procuct in category controller
$this->Products->totalActiveProduct(); //Total products in Product controller.
Run Code Online (Sandbox Code Playgroud)
实际上,当您在控制器中编写查询时,您必须使用模型的对象(这意味着您间接地使用控制器)。您认为您正在将其写入控制器中,但实际上,您正在将其写入模型(模型对象)中。
$this->Products->find('all');
Run Code Online (Sandbox Code Playgroud)
简而言之,这意味着您正在将其写入模型对象中(其中 Products 是模型对象)。您直接或间接地通过模型进行每一个数据库操作。