Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 控制器可以有数据库查询(MySQL)吗?如果是,什么时候?_Php_Mysql_Oop_Model View Controller_Frameworks - Fatal编程技术网

Php 控制器可以有数据库查询(MySQL)吗?如果是,什么时候?

Php 控制器可以有数据库查询(MySQL)吗?如果是,什么时候?,php,mysql,oop,model-view-controller,frameworks,Php,Mysql,Oop,Model View Controller,Frameworks,我正在阅读很多关于MVC的教程,所以我的问题是,一个完美的PHP MVC框架能在Controller中包含数据库查询吗?据我所知,最舒适的方法是将所有数据库查询放在模型中,对吗?如果我有POST或smth,我只需将该POST传递给模型,它就可以制作所有插入,等等 或者我错过了什么?如果控制器可以有一个数据库查询,在哪种情况下会是这样?任何控制器都不能有任何与数据库相关的代码-任何数据库查询都可以存储在MVC体系结构中的模型中-控制器只与模型一起工作,而不能直接与数据库一起工作 编辑:大多数框架都

我正在阅读很多关于MVC的教程,所以我的问题是,一个完美的PHP MVC框架能在Controller中包含数据库查询吗?据我所知,最舒适的方法是将所有数据库查询放在模型中,对吗?如果我有POST或smth,我只需将该POST传递给模型,它就可以制作所有插入,等等


或者我错过了什么?如果控制器可以有一个数据库查询,在哪种情况下会是这样?

任何控制器都不能有任何与数据库相关的代码-任何数据库查询都可以存储在MVC体系结构中的模型中-控制器只与模型一起工作,而不能直接与数据库一起工作


编辑:大多数框架都允许直接从Controller调用SQL—但从技术上讲,它不是MVC,而是一堆对象—是的,这是可能的。但它将打破MVC背后的整个理念。

任何控制器在理想和概念上都不能包含任何数据库查询。如果您在控制器本身中有一些查询,那么它将带走MVC体系结构的一些关键优势,例如代码分离等

理想情况下, 模型类(M)必须包含DB查询以及通过DB对象与DB的任何交互。理想情况下,模型表示数据库中的表或用于io的文件

视图(V)必须包含包含很少PHP的HTML。在大多数情况下,只使用循环和条件语句

控制器类(C)必须包含应用程序的所有业务逻辑、错误处理程序等


维护MVC体系结构对于维护、调试和理解新开发人员的代码非常有用。上述规范带来了很多好处。

在我的软件中,我可以从模型中提取查询对象,并从控制器内部执行它们:

$model->dsql()->where('age>',20)->do_delete();

所以从技术上讲,控制器可以执行查询,但它必须依赖于模型来构建该查询。

那么,为什么CodeIgniter允许这样做呢?@OZ_216;:Lol,这是诚实的:DWell,有些人可能认为它很蹩脚,但我相信这只是为了在需要时让某些应用程序更简单。这是CodeIgniter相对于其他框架的最大优势之一——如何构建应用程序取决于您,如果其中只有两个SQL查询,为什么要编写模型?再一次-这打破了MVC模型,但它是有用的。如果你现在制作更简单的应用程序,你将在这方面节省四分之一的时间,当你将来修改这个应用程序时,这个非VC-s将花费你比你在it上节省的时间多得多,但我不是说处理大量数据的应用程序,但是,您只需要执行2或3个查询——为什么我要编写一个只包含一个方法的模型?如果你需要扩展它,你可以复制粘贴查询到新创建的模型中并替换它。我同意不同意。控制器只能用于控制应用程序的流。错误处理和业务逻辑应该包含在模型中。我想知道模特们能百分之百地自立。它们处理自己的验证、逻辑和错误处理。我想我们都有不同的观点。那么这些观点呢?我的观点是否应该如此?我没有发现任何关于它的问题。不,不应该,查看所需的任何数据都必须在控制器中准备好。我使用的唯一替代方法是帮助函数,但这不是干净的MVC。