• CakePHP manual 中文翻译3


    第五章 Scaffolding (脚手架?)

    Scaffolding是一个很棒的途径,使得早期开发的部分web应用能够运行起来。早期的数据库模式是不稳定的,很容易变化。Scaffolding有个下降趋势:web程序员憎恨创建以后可能根本用不到的forms。为了减少程序员的这种重复劳动, Cake中包含了Scaffolding。Scaffolding分析数据库,创建一些标准的使用add、delete、和edit按钮的lists,创建输入的forms,以及查看数据库中一个item的标准views。为了在程序中的controller中添加Scaffolding,需要添加$scaffold变量:

    1. class CategoriesController extends AppController
    2. {
    3.     var $scaffold;
    4. }

    有关Scaffold,要注意一个重要的问题: Scaffold期望每个以_id结尾的filed name是一个外键并且指向一个table,table的名称和_id前方的一样(只不过是小写的)。所以,举个例子来说,如果你嵌套了分类,你最好有个列叫做parent_id。在这个版本中,最好能够命名为parentid.同样,在表中有一个外键(比如,titles table有个category_id),并且你已经合适的联结到models(查看6.2理解联结),在show/edit/newd的views中,选择的表将会和外键的表(category)一起自动的表现出来(原文:a select box will be automatically populated with the rows from the foreign table (category) in the show/edit/new views.)。在foreign model中设置$displayField来决定foreign中哪些field会被显示。继续我们的例子,category有个标题

    1. class Title extends AppModel 
    2. {
    3.     var $displayField = 'title';
    4. }


    第六章 Models

    本章内容:

    1. Model Function

    1.1 用户定义的Function

    1.2 检索(retrieving)你的数据

    1.3 保存你的数据

    1.4 Model的回调(callbacks)

    2. Model的变量

    3. Associations

    Model是什么,它是MVC模式中的M

    Model做些什么。它使得domain logic和presentation分隔开,独立application logic(It separates domain logic from the presentation, isolating application logic.)

    一个Model概要的说就是一个指向数据库的access,更具体,就是数据库中的特定的table。默认的,每个model都使用自身名字复数形式的table,比如,User Mode使用 users

    table。Models可以维护数据特定的规则,联结信息以及它使用的table的方法。

    1. Model的方法

    从PHP的观点看,models都是从AppModel类继承来的类。类AppModel原始是定义在 /cake目录下。你也可以创建自己的放在 app/app_model.php.这个文件应该包含一些可供多个models共享的方法。AppModel本身也是从Model类继承而来的,Model类是一个标准的Cake库,定义在 libs/model.php

    注意

    虽然本节介绍的是Model中常用的方法,然而记住:更详细的参考请到http://api.cakephp.org

    1.1 用户定义的方法

    下面是model中一个特定table的例子,该例子实现了在blog中显示和隐藏两种方法

    1. 例6.1  Example Model Functions
    2. <?php
    3. class Post extends AppModel
    4. {
    5.    function hide ($id=null)
    6.    {
    7.       if ($id) $this->setId($id);
    8.       $this->set('hidden', '1');
    9.       $this->save();
    10.    }
    11.  
    12.    function unhide ($id=null)
    13.    {
    14.       if ($id) $this->setId($id);
    15.       $this->set('hidden', '0');
    16.       $this->save();
    17.    }
    18. }
    19. ?>

    1.2 检索数据

    下面是使用model得到数据的一些标准方法

    1. findAll($conditions,$fields,$order,$limit,$page,$recursive)

    ○返回特定的fields,fields由$limit(默认是50)个记录,匹配$conditions(如果有),从第$page(默认1)页开始列表,$conditions内容应该像SQL语句中的一样,比如:$conditions=”race = ‘wookie’ AND thermal_detonators>3”

    ○当$recursive选项设置成1到3的整数,findAll()将会试图返回在联结到该model中发现的所有项的models.这项递归寻找可以深入3层。

    1. find($conditions, $fields, $order, $recursive)

    ○返回匹配$conditions的第一条记录的制定的fields(如果没有指定则返回全部)

    ○$recursive作用同上

    1. findAllBy<FieldName>($value) and findBy<FieldName>($value)

    ○这些奇妙的方法可以用于指定特定的field和特定的value快速查找行,你要做的就是把你的field用驼峰表达法添加在后面。举个例子(用于controller中)

    1. $this->Post->findByTitle('My First Blog Post');
    2. $this->Author->findByLastName('Rogers');
    3. $this->Property->findAllByState('AZ');
    4. $this->Specimen->findAllByKingdom('Animalia');

    返回的结果是一个数组,和find()以及findAll()返回的结果是一个形式

    1. field($name,$conditions,$order)

    ○根据$order排序,根据条件$conditions,将第一条记录中的field值,作为string返回

    1. findCount($conditions)

    ○返回匹配$conditions的记录的个数

    1. generateList
    2.  
    3. ($conditions=null,$order=null,$limit=null,$keyPath=null,$valuePath=null)

    ○根据models的lists,得到一系列key的值,特别是根据model list创建

  • 相关阅读:
    加载页面(Loading)
    js判断手机连接网络类型
    combotree的加载方法
    jquery.util.easyui.dialog
    datagrid后台分页js.js
    安卓使用Canvas绘制工作日程表
    【Oracle】OGG数据初始化之RMAN
    怎样优雅的管理ActionBar
    openwrt undefined reference to ‘getpwent_r’
    通过文件对照工具Merge数据库
  • 原文地址:https://www.cnblogs.com/kuyuecs/p/1330424.html
Copyright © 2020-2023  润新知