Php 控制器可以有数据库查询(MySQL)吗?如果是,什么时候?
我正在阅读很多关于MVC的教程,所以我的问题是,一个完美的PHP MVC框架能在Controller中包含数据库查询吗?据我所知,最舒适的方法是将所有数据库查询放在模型中,对吗?如果我有POST或smth,我只需将该POST传递给模型,它就可以制作所有插入,等等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体系结构中的模型中-控制器只与模型一起工作,而不能直接与数据库一起工作
编辑:大多数框架都允许直接从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。