`

批判下cakephp中的SQL写法

    博客分类:
  • PHP
阅读更多
PHP的框架是超多了,但有时,感觉有些框架是不是考虑的太过度了,总要把简单的事
复杂化,比如下面举出CAKEPHP中的FIND的写法,看上去象HIBERNATE的查询语法,但HIBERNATE的比它简单多了,明明SQL简单通用的东西,要故弄玄虚的搞一翻,还要安上自己的一些规则,所以嘛,不要迷信框架,要选合适自己用的部分,下面举例之:

1 如果我们想找一个ISBN书号为'1234567890'的书,我们只需执行如下SQL命令:
SELECT * FROM `books` AS `Book` WHERE `Book`.`isbn` = '1234567890';
但是在CakePHP的在BooksController中,我们可以像下面这样调用find()方法:

    $this->Book->find('first', array(
                               'conditions' => array(
                               'Book.isbn' => '= 1234567890'
                                                    )
                                    )

    这个还可以接受,再来个:
2 如果我们想查找由'Anupom Syam' , 'Ahsanul Bari' 以及 'David Barnes'等人撰写的所有书籍,我们可以使用下面这个SQL语句来实现:
SELECT * FROM `books` AS `Book` WHERE Book.author_name IN ( 'Anupom Syam', 'Ahsanul Bari', 'David Barnes')
在CakePHP中,我们可以像下面这样使用find()方法来实现上面SQL语句的效果
$this->Book-> find('all', array(
                                 'conditions' => array(
                                   'Book.author_name' => array(
                                                'Anupom Syam',
                                                'Ahsanul Bari',
                                                'David Barnes'
                                                              )
                                                         )
                                    )
                       );我们可以通过在对应的字段名后面设置一个包含有值的数组来实现与SQL逻辑运算符IN()同等的效果。

    你看,已经复杂不少了!

3 如果我们想查找所有由'David Barnes'撰写或者书名中包含有”CakePHP“一词的书,我们只需使用下面这段SQL语句:

    SELECT * FROM `books` AS `Book` WHERE Book.author_name LIKE ( 'David Barnes' OR Book.title LIKE '%CakePHP%')在CakePHP中,它所对应的代码是:
$this->Book-> find('all', array(
                          'conditions' => array(
                                "or" =>
                                array
                                (
                          "Book.author_name" => "David Barnes",
                          "Book.title" => "%CAKEPHP%"
                                )
                             )
                         )
                      );

你看,本来好好的一个SQL语句,还要故弄玄虚的搞成这样,如果不说规则,还真不知道还原成SQL语句是什么样子的,可读性差(把OR单独抽取了出来)

   
2
4
分享到:
评论
3 楼 jackyrong 2011-12-08  
bingxingke2 写道
你可以用原生的sql语句来查询啊,没逼着你用cake的来写:
$this->Book->query($sql);

cake model也有魔术方法(findBy,findAllBy)的,比如你的第一个例子可以这么写:
$this->Book->findByIsbn ('1234567890');



不是说逼,而是觉得太过复杂故弄玄虚的技术,生产中应该少用
2 楼 bingxingke2 2011-12-08  
你可以用原生的sql语句来查询啊,没逼着你用cake的来写:
$this->Book->query($sql);

cake model也有魔术方法(findBy,findAllBy)的,比如你的第一个例子可以这么写:
$this->Book->findByIsbn ('1234567890');

1 楼 ly365 2011-06-22  
纯蛋疼,效率低

相关推荐

    cakephp打印sql语句的方法

    在开发模式下,你可以通过配置文件开启调试模式(debug模式),并在视图中使用CakePHP提供的调试工具来查看SQL执行情况。 4. 配置日志记录参数 可以通过调整日志记录的级别来控制需要打印的SQL语句。在core.php文件...

    cakephp中文手册API

    在CakePHP中,模型通常与数据库表关联,用于执行CRUD(创建、读取、更新、删除)操作。ORM(对象关系映射)是模型层的核心,使得开发者可以用面向对象的方式来操作数据库。 4. **视图(View)**: 视图负责展示...

    cakephp中文手册

    在 CakePHP 中,开发者可以快速地搭建功能丰富的Web应用程序。其主要特点包括: 1. **快速开发**:CakePHP 提供了大量的内置功能,如数据库连接管理、ORM(对象关系映射)、表单处理和验证、自动化的脚手架生成等,...

    cakephp 中文手册

    2. **查询构造器**:通过ORM(对象关系映射),开发者可以使用链式方法构建复杂的SQL查询,无需直接编写SQL语句。 ### 四、验证和错误处理 1. **数据验证**:在模型层,可以设置数据验证规则,确保输入数据的完整...

    CakePHP 1.2 API 中文文档

    在 CakePHP 中,MVC模式是核心设计思想。Model代表数据模型,处理与数据库的交互;View负责展示用户界面;Controller作为模型和视图之间的桥梁,处理用户请求并调用相应的模型方法,然后将数据传递给视图进行渲染。 ...

    cakephp 中文文档

    默认情况下,数据源主要是数据库,但也可以通过自定义 DataSource 来处理 RSS feeds、CSV 文件、LDAP 目录数据甚至是 iCal 事件。 - **模型回调函数**:与控制器类似,模型也支持一系列的回调函数,如: - `before...

    CakePHP中文手册

    10. **插件(Plugin)**:插件是独立的CakePHP应用,可以方便地集成到项目中,提供了模块化开发的可能性。 11. **错误处理与调试**:涵盖了错误报告、日志记录和调试工具,如DebugKit,它是一个可视化的工具集,...

    cakephp中文手册.pdf

    在 CakePHP 中,MVC模式被实现得非常直观和易于使用。例如,控制器类通常放在`app/Controller`目录下,模型类位于`app/Model`,而视图文件则位于`app/View`。 **MVC 模式** 虽然手册建议在阅读前了解MVC的基本概念...

    CakePHP 中文手册.rar

    CakePHP是一个开源的PHP on rails的full-stack framework。最开始从Ruby On Rails框架里得到灵感。程序员可使用它来快速创建的Web应用程序。我们的首要目的是使你以一种预置的快速且不失灵活性的方式开展工作。

    cakePHP 中文手册

    CakePHP有多个特点,这些特点让CakePHP成为了快速开发框架中的佼佼者之一。 1.活跃友好的社区 2.灵活的许可协议(Licensing) 3.兼容PHP4和PHP5 4.数据库交互和简单查询的集成 5.应用程序Scaffolding 6....

    CakePHP 1.3中文帮助文档

    CakePHP 1.3中文帮助文档,内容简单易懂并且全面,值得大家下载...

    CakePHP使用ajax传值

    CakePHP框架中实现Ajax传值是通过AJAX (Asynchronous JavaScript and XML) 技术与后端的CakePHP控制器进行数据交换的一种方式。通常在Web开发中,Ajax用于创建更为动态和响应快速的用户界面。当用户与页面上的元素...

    PHP的框架之CakePHP-CakePHP教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    CakePHP PHP MVC框架

    在CakePHP中: - **Model**:代表数据模型,负责处理和数据库交互的业务逻辑,封装了数据操作。 - **View**:视图负责展示数据,通常用于生成用户界面。 - **Controller**:控制器处理用户请求,调用模型进行数据...

    cakephp中acl详解

    在CakePHP中,Access Control List(ACL)是一个强大的工具,用于管理应用程序中的权限和访问控制。让我们深入探讨一下CakePHP中的ACL系统。 ### ACL基础概念 **1. ACO (Access Control Object)**:ACO代表要控制...

    cakephp 框架1.3.11版本

    在CakePHP中,模型处理数据和业务规则,视图负责展示数据,控制器则协调模型和视图,实现数据的交互。 2. **ActiveRecord**:CakePHP采用了ActiveRecord模式,允许开发者通过简单的对象操作来访问数据库。每个...

    PHP的框架之CakePHP-CakePHP教程终极教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

Global site tag (gtag.js) - Google Analytics