cakephp 的query方法,直接写在controller中是否 有点不合适

模型的query()函数有时是非常实用的,它可以在任何需要数据的地方执行SQL语句.
但不是在什么地方调用query()方法都是恰当的.特别是在控制器中直接调用模型的query()方法

$this->MyModel->query(‘Here comes the SQL statement‘);

在控制器中调用模型的query方法么有什么不可以,但它引入了数据库相关的代码,这违反了MVC模式的原则

一个更加干净的方案是把SQL语句移动到模型中,因此上面那段代码重构为:

// 在模型中
function doSomething() {
    $this->query(‘Here comes the SQL statement‘);
}
// i在控制器中
$this->MyModel->doSomething();

不要在控制器中加入数据库相关的代码,这些代码都应该放置在模型中,有模型去处理

这个方案需要编写更多的代码,但是它带来了一些优点:

* 易于测试
    * 更可读
    * 避免了查询代码在多个控制器之间导出复制,使代码更简洁

时间: 2024-10-09 21:47:53

cakephp 的query方法,直接写在controller中是否 有点不合适的相关文章

为spring boot 写的Controller中的rest接口配置swagger

1.pom.xml文件中加入下列依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version></dependency> <dependency> <groupId>io.springfox</groupId&g

getContentResolver().query()方法selection参数使用详解(转)

如何在managedQuery()和getContentResolver().query()方法中实现结果去重 有时候,我们需要对查询的数据库结果进行去重.在SQL中我们可以通过distinct关键字实现,但是当我们使用android提供的managedQuery()或getContentResolver().query()方法对数据库进行查询时,并不能使用distinct关键字.那么,如何解决呢? 首先,让我们来了解一下android中query方法吧. 当我们调用android系统的quer

Controller类的方法上的RequestMapping一定要写在Controller类里吗?

使用Spring Cloud做项目的同学会使用Feign这个组件进行远程服务的调用,Feign这个组件采用模板的方式,有着优雅的代码书写规范.核心原理对Feign等相关注解进行解析,并提取信息,在Spring Boot工程启动时,通过反射生产Request的bean,并将提取的信息,设置到bean中,最后注入到ioc容器中. 现在有这样的场景,服务A提高RestApi接口,服务B.C.D等服务需要调用服务A提供的RestApi接口,这时最常见的做法是在服务B.C.D分别写一个FeignClien

IOS之方法混写(swizzling.)

OC中的混写(swizzling)是指透明地把一个方法换成另外一个.简明的说就是在运行时替换方法.利用方法混写可以改变那些没有源代码的对象(包括系统对象)的行为. 方法混写的代码看起来相对比较直观的,举个例子说明一下,之前做本地化翻译的时候就有用到 swizzling 方法.直接去swizze方法 awakeFromNib 然后替换成自己的方法实现以实现本地化翻译.详细可以看这篇文章:IOS本地化应用程序. 主要用到的代码也就这两句: +(void)load { // Autoload : sw

Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式

Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式 >> ios 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/ios/1010000008980619/MethodSwizzing中一般替换方法都写在Category类别里吗有没有别的实现方式.html

当写listview的onItemClick的方法时写Toast的参数context写成this出现can&#39;t resolve method ’make text(OnClickListener,java.lang.String,int)&#39;的错误,原因

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); //Toast.makeText(this,fruit.getName(),Toast.L

SQLAlchemy中的Query方法

在SQLAlchemy中执行查询是通过session对象的query方法完成的.query方法非常灵活,你可以根据需要使用不同的查询方式查找数据,下面一一举例.1.直接通过映射类查找: #Querying user instancefor instance insession.query(User).order_by(User.id):  print instance.name,instance.fullname 这种方法只要在query方法中,将映射类作为参数,就可以查询出这个映射类代表的数据

query()方法

执行SQL命令,无论如何通过PHP脚本与Mysql数据库交互,过程都是一样的,创建一个SQL语句,再传递给执行查询的函数. 在mysqli类中提供了几种执行SQL命令的方法,其中最常用的是query()方法. 对于insert.update.delete等不会返回数据的SQL命令,query()方法在SQL命令成功执行时返回true.在此基础上还可以通过mysqli对象中的affected_rows属性猎取有多少条记录发生变化而且使用mysqli对象中的insert_id()方法可以返回最后一条

PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入

1.安装 PDO 数据库抽象层 PDO - PHP Data Object 扩展类库为 PHP 访问数据库定义了一个轻量级的.一致性的接口,它提供了一个数据访问抽象层,针对不同的数据库服务器使用特定的 PDO 驱动程序访问,如图: Windows 环境下 PHP 5.1 以上版本通过编辑 php.ini文件来安装 PDO:去掉 extension=php_pdo.dll 前面的 ; 如果使用的数据库是 MySQL ,在 php.ini 文件中加载 MySQL 的 PDO 驱动: 添加 exten