`

一步一步学习CakePHP(三)model

    博客分类:
  • php
 
阅读更多

model,它使领域逻辑从表现层和独立的业务逻辑中剥离出来,从理论上来说,model实现了ActiveRecord,所以它不仅仅是是一个数据的抽象层,此外,还提供了许多有用的方法,可以方便简洁的操作数据库,在CakePHP中,一个model经常代表了数据库中的某张表。

一:创建数据库和model

我们首先创建数据库和表:

CREATE DATABASE `data-access`;

USE `data-access`; 
CREATE TABLE `books` ( 
`id` int( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`isbn` varchar( 10 ) NOT NULL , 
`title` varchar( 127 ) NOT NULL , 
`description` text NOT NULL , 
`author_name` varchar( 127 ) NOT NULL 
)

modelbook.php

<?php 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class Book extends AppModel{ 
    var $name = 'Book'; 

?>

controller:books_controller.php

<?php 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class BooksController extends AppController{ 
    var $name = 'Books'; 
    var $scaffold; 

?>

注意此处的var $scaffold,脚手架会创建一个基本的应用程序,会自动创建CRUD功能。

clip_image002

二:检索数据

CakePHP中,已经存在了很多方法,可以使开发者很方便地从数据库检索到数据。

修改books_controller.php,去掉脚手架:

<?php 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class BooksController extends AppController{ 
    var $name = 'Books'; 
    //var $scaffold; 
    function index(){ 
        $books = $this->Book->find('all', 
                array( 
                    'fields' =>array( 
                        'Book.isbn', 
                        'Book.title', 
                        'Book.author_name' 
                    ), 
                    'order' => 'Book.title ASC' 
                ) 
                ); 
        $this->set('books',$books); 
    } 

?>

创建/app/views/books/index.ctp

<table> 
  <thead> 
    <th>ISBN</th><th>Title</th><th>Author</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
  </tr> 
  <?php endforeach; ?> 
</table>

CakePHP中,一个model的实例,会被当作controller的属性,如$this->Book,而find()就是book model的一个方法,第一个参数all,就是说明需要获得全部的数据。

clip_image004

find()方法是非常灵活的,如一个类似这样的SQL查询

SELECT `Book`.`isbn`, `Book`.`title`, `Book`.`author_name` 
FROM `books` AS `Book` 
WHERE `Book`.`title` LIKE 'A%' 
ORDER BY `Book`.`isbn` DESC 
LIMIT 2;

我们可以用find()来实现:

'conditions' => array('Book.title LIKE' => 'A%'),

下面详细叙述一下find的参数,第一个可以是all、first、count,第二个参数为一数组,数组的key可以是:conditions、fields、order、limit、offset。

三:保存数据

books_controller.php增加add():

function add(){ 
    if(!empty($this->data)){ 
        $this->Book->create(); 
        if(!!$this->Book->save($this->data)){ 
            $this->Session->setFlash('Book is Saved!',true); 
            $this->redirect(array('action'=>'index')); 
        } 
    } 
}

app/views/books/add.ctp:

<?php echo $form->create('Book');?> 
      <fieldset> 
          <legend>Add New Book</legend> 
      <?php 
         echo $form->input('isbn'); 
         echo $form->input('title'); 
         echo $form->input('description'); 
         echo $form->input('author_name'); 
      ?> 
      </fieldset> 
   <?php echo $form->end('Submit');?>

clip_image006

在add中,我们首先判断是否从view中返回数据,如果没有返回,那么将会呈现view,当我们提交form表单的时候,数据将会提交到add action。

我们用Book model作为参数,传给FormHelper的create方法,然后,使用其input方法添加input元素,并且使用数据库表中的字段名称作为参数,这将会帮助FormHelper自动绑定。最后,按下提交按钮,所有的数据将会被提交给add,提交的数据可以通过controller的属性$this->data获得。

四:更新记录

books_controller.php增加edit():

function edit($id=null){ 
    if(!$id && empty ($this->data)){ 
        $this->Session->setFlash('Invalid Book',true); 
        $this->redirect(array('action'=>'index')); 
    } 
    if(empty ($this->data)){ 
        $this->data = $this->Book->read(null,$id); 
    } 
    else{ 
        $this->Book->create(); 
        if(!!$this->Book->save($this->data)){ 
            $this->Session->setFlash('已经更新',true); 
            $this->redirect(array('action'=>'index'),null,true); 
        } 
    } 
}

app/views/books/edit.ctp:

<?php echo $form->create('Book');?> 
   <fieldset> 
       <legend>Edit Book</legend> 
      <?php 
         echo $form->input('id'); 
echo $form->input('isbn'); 
         echo $form->input('title'); 
         echo $form->input('description'); 
         echo $form->input('author_name'); 
      ?> 
   </fieldset> 
<?php echo $form->end('Submit');?>

修改app/views/books/index.ctp:

<table> 
  <thead> 
<th>ISBN</th><th>Title</th><th>Author</th><th>Actions</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
<td><?php echo $html->link('编辑','edit/'.$book['Book']['id']) 
       ?></td> 
  </tr> 
  <?php endforeach; ?> 
</table>

clip_image008

clip_image010

由此可见,save()在add和edit中都可以使用,不同的是,在edit中,id主键必须在$data中存在。

五:删除记录

books_controller.php增加delete():

function delete($id = null){ 
    if(!$id){ 
        $this->Session->setFlash('Invalid Book',true); 
    } 
    else if($this->Book->del($id)){ 
        $this->Session->setFlash('已经删除',true); 
    } 
    else{ 
        $this->Session->setFlash('删除失败',true); 
    } 
    $this->redirect(array('action'=>'index')); 
}

修改app/views/books/index.ctp:

<table> 
  <thead> 
    <th>ISBN</th><th>Title</th><th>Author</th><th>Actions</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
    <td><?php echo $html->link('编辑','edit/'.$book['Book']['id']) 
       ?> 
        <?php echo $html->link('删除', array('action'=>'delete', 
                              $book['Book']['id']) ) ?> 
    </td> 
  </tr> 
  <?php endforeach; ?> 
</table>

clip_image012

分享到:
评论

相关推荐

    cakephp学习笔记

    CakePHP 遵循MVC(Model-View-Controller)设计模式,这是一种分离业务逻辑、数据和用户界面的设计方式,有利于提高代码的可维护性和可扩展性。 框架内建了清晰且高度自定义的URL管理和路由系统,通过Request ...

    cakephp框架 学习ing

    在这个"cakephp框架 学习ing"的主题中,我们将深入探讨 CakePHP 的核心特性、优势以及如何开始学习和使用它。 首先,让我们了解MVC模式。MVC是一种软件设计模式,将业务逻辑(Model)、用户界面(View)和数据控制...

    cakephp-1.2 manual

    10. **调试与性能优化**:学习如何使用 CakePHP 的调试模式进行问题排查,以及如何进行性能优化,如使用缓存和优化查询。 11. **插件(Plugins)**:CakePHP 插件允许你重用和扩展框架的功能,手册会解释如何安装、...

    cakephp框架源码

    Model层,CakePHP使用ActiveRecord模式,每个Model类代表数据库中的一个表。ORM(对象关系映射)使得开发者可以以面向对象的方式操作数据库,如find()方法用于查询数据,save()用于保存数据。此外,CakePHP的关联...

    cakephp 框架

    CakePHP 拥有活跃的社区,提供详尽的官方文档,包括教程、API 文档和最佳实践指南,为开发者提供了丰富的学习资源。 总之,CakePHP 框架以其高效、灵活和易用性,成为PHP开发者的热门选择。它不仅简化了Web应用的...

    CakePHP 1.2 API 中文文档

    **CakePHP 1.2 API 中文... CakePHP 1.2 API 中文文档覆盖了框架的主要组件、类库和方法,是开发者学习和使用该框架的重要参考资料。通过深入理解和实践这些知识点,开发者能够高效地构建稳定、可维护的PHP Web应用。

    cakephp 框架书籍 英文版

    ### CakePHP框架书籍知识点概述 #### 一、Getting Started(开始使用) ...这本书籍涵盖了从基础概念到高级主题的各个方面,对于希望学习和使用CakePHP框架的开发者来说,是一份非常全面且有价值的资源。

    CakePHP PHP MVC框架

    CakePHP是一个广泛使用的开源PHP框架,它基于Model-View-Controller(MVC)架构模式,旨在简化Web应用程序的开发流程,提高开发效率,并且支持快速原型制作。这个框架以其易用性、可扩展性和安全性而受到开发者们的...

    cakephp 框架1.3.11版本

    CakePHP是一个基于MVC(Model-View-Controller)设计模式的开源PHP框架,它旨在简化Web应用程序的开发过程,提高开发效率。这个压缩包文件包含了有关CakePHP 1.3.11版本的信息,该版本发布于较早的时期,但仍然对...

    PHP的框架之CakePHP-CakePHP教程

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

    cakephp手册完整打印版

    CakePHP是一款基于Model-View-Controller(MVC)设计模式的开源PHP框架,它简化了Web应用开发过程,提高了开发效率。这份手册包含了从基础概念到高级特性的全方位教程和指南。 手册描述中提到,原始的单页手册可能...

    cakephp-1.3.21.zip

    《CakePHP 1.3.21:框架详解与应用实践》 CakePHP是一个基于Model-View-Controller(MVC)架构...虽然现在已经有更新的版本,但 CakePHP 1.3.21仍然是许多项目的基础,它的设计理念和实践经验依然具有很高的学习价值。

    CakePHP框架指南

    CakePHP框架是一个开源的PHP开发框架,它遵循了多种著名的设计模式,包括ActiveRecord(活动记录)、Association Data Mapping(关联数据映射)、Front Controller(前端控制器)和Model-View-Controller(模型-视图...

    cakephp php-framework

    There are two main ways to get a fresh copy of CakePHP. You can either download an archive copy (zip/tar.gz/tar.bz2) from the main website, or check out the code from the git repository. To download ...

    phpmvc框架cakephp

    2. **目录结构**:CakePHP有清晰的目录结构,如APP(应用程序)、VENDOR(第三方库)、WEBROOT(网页资源)等,这有助于保持代码组织有序。 3. **路由系统**: CakePHP的路由机制允许开发者灵活地定义URL模式与控制...

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    ### CakePHP 3.4 开发手册文档概览 #### CakePHP 一瞥 ...这份文档不仅涵盖了框架的基础知识,还深入探讨了高级主题和技术细节,对于任何希望深入了解和使用 CakePHP 的开发者来说都是宝贵的学习资源。

    cakephp最新开发文档

    1. **MVC模式**:MVC是一种设计模式,将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑和数据管理,视图负责呈现用户界面,而控制器处理用户请求并协调模型和视图之间...

    CakePHP框架最全中文文档

    - **MVC设计模式**:控制器(Controller)、模型(Model)和视图(View)是CakePHP的核心组成部分。这种模式有助于分离关注点,使得代码更加模块化和易于管理。 - **可扩展性和可重用性**:通过组件(Component)、...

Global site tag (gtag.js) - Google Analytics