模型

模型在应用程序中是作为业务层而存在的(怎么感觉是数据层。。。。。。)。这就意味着,模型应当负责管理几乎所有涉及数据的事情,其合法性,以及你的业务领域中数据在工作流程中的演化和互动 。

通常模型类用来表示数据,并且在 CakePHP 应用程序中用来访问数据,具体说,模型代表数据库中的表,但不限于此,也可以访问任何操控数据的东西,比如文件,外部网络服务,iCal 日程,或者 CSV 文件中的行。

一个模型可以与其他模型关联。例如,一份菜谱可以和菜谱的作者关联,也可以和菜谱的原料相关联。

本章中我们将解释模型的哪些特性可以自动化,如何改变这些特性,以及模型有哪些方法和属性。

我们会解释关联数据的各种方式。我们还将描述如何查找,保存和删除数据。

最后,我们来看一下数据源(Datasource)。

理解模型

模型代表你的数据模型。在面向对象编程中数据模型是表示一件”事物”的对象,比如,一辆汽车,一个人,或者一所房子。

例如,一个博客可以有多篇文章, 每篇文章又可以有多条评论。博客,文章和评论就是彼此关联的模型的例子。

这里有一个 CakePHP 模型定义的简单例子:

1 App::uses('AppModel', 'Model');
2 class Ingredient extends AppModel {
3     public $name = 'Ingredient';
4 }

仅需这样简单的声明,Ingredient 模型就具备了所有用来生成查询以及保存和删除数据的功能。这些魔术般的方法来自 CakePHP 的 Model 类,得益于继承的魔法。

Ingredient 模型扩展了应用程序模型AppModel,而 AppModel 又扩展了 CakePHP 内部的 Model 类。就是这个核心的 Model 类赋予你的 Ingredient 模型这些功能的。App::uses('AppModel', 'Model') 保证模型在每次使用时都延迟加载(当加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句)了。

这个中间的类 AppModel 是空的。如果你没有自己创建,则会从 CakePHP 内核文件夹中取得。重载AppModel,你就可以定义你的应用程序中所有的模型都具备的功能。

为此,你需要在 Model 文件夹中创建自己的 AppModel.php,就象你的应用程序中所有其他的模型一样。

回到我们的 Ingredient 模型,在 /app/Model/ 目录中创建一个 PHP 文件。

按照惯例,文件名应该和类名一样; 在本例中就是``Ingredient.php``。

如果 CakePHP 在 /app/Model 目录中无法找到对应的文件,它就会为你动态创建一个模型对象。这也意味着,如果你的模型文件命名不正确(比如 ingredient.php 或者 Ingredients.php), CakePHP 就会使用 AppModel 的实例,而不是你的找不到的(从 CakePHP 的角度来看)模型文件。如果你试图使用在你的模型中定义的方法,或者你的模型上附加的行为,然而你得到的却是关于你调用的方法的名称的 SQL 错误——这明显是因为 CakePHP 无法找到你的模型,那么你要检查文件名、应用程序缓存,或者两者都要检查。

某些类名是无法作为模型名称的。例如,”File” 无法使用,因为 “File” 是 CakePHP 内核中已经存在的一个类了。

模型定义了之后,就可以在 控制器 中使用了。如果模型名称与控制器名称匹配,CakePHP 就会自动使该模型可以访问。

例如,一个叫 IngredientsController 的控制器会自动初始化 Ingredient 模型,并把它附加在控制器上,作为 $this->Ingredient:

1 class IngredientsController extends AppController {
2     public function index() {
3         //获得所有原料并把它传给视图:
4         $ingredients = $this->Ingredient->find('all');
5         $this->set('ingredients', $ingredients);
6     }
7 }

关联的模型可以从主模型访问到。在下例中,Recipe 与 Ingredient 有关联:

1 class Recipe extends AppModel {
2
3     public function steakRecipes() {
4         $ingredient = $this->Ingredient->findByName('Steak');
5         return $this->findAllByMainIngredient($ingredient['Ingredient']['id']);
6     }
7 }

这里展示了如何使用已经关联在一起的模型。

转载于:https://www.cnblogs.com/victorruan/p/3564065.html

CakePHP之Model相关推荐

  1. CakePHP快速入门

    快速入门 CakePHP的框架为您的应用程序提供了一个强大的基础.它可以处理每一个环节,从用户的初始请求一路到网页的最终渲染. 而且,由于该框架采用MVC的框构,它可以让你轻松定制和扩展你的应用程序. ...

  2. CakePHP 2.x CookBook 中文版 第七章 模型

    模型 模型是应用程序中业务层的类. 这意味着它们负责管理工作域中几乎所有的与数据有关的东西:数据校验.交互和信息流演化. 通常模型类代理数据,用于 CakePHP 应用程序的数据访问,多数时候它们代理 ...

  3. 【转载】PHP开发框架的现状和展望

    未来,PHP将成为Web开发领域中越来越重要的平台.因此我们相信会出现更多更好的开发框架.虽然作为开发者来说,并不一定需要采用某一个框架来解决问题.但正是因为这些不断出现的框架,我们对使用PHP开发W ...

  4. cakephp oracle,CakePHP入门(8)-创建Model

    一个最本的Blog程序除了能够发布文章,还应该让其它用户添加评论,前面的几步都是针对post作为例子,只有一个表,这里加入一些其它表,让一个blog具备基本一些最基本的元素. 删除之前的posts,重 ...

  5. CakePHP下使用paginator需要对多个字段排序的做法

    原文:http://blog.csdn.net/kunshan_shenbin/article/details/7644603  CakePHP下使用paginator需要对多个字段排序的做法 201 ...

  6. cakephp oracle,Cakephp的魔法函数解析,findBy…

    Cakephp的一个非常有意思的特色,就是,可以通过它的Model使用类似于findBy(Fields)这样的方法直接取得数据的调用,例如,我们可以直接取得ID为5的数据,可以这样: $data =$ ...

  7. Cakephp事件机制尝鲜

    cakephp 很老的框架了,尝鲜算是牵强,不过就算很先进的框架例如YII都有这些机制,不过仍然没有理解 手册地址: http://book.cakephp.org/2.0/en/core-libra ...

  8. 【转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgnit...

    2019独角兽企业重金招聘Python工程师标准>>> [转]主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,Think ...

  9. CakePHP你必须知道的21条技巧

    原文链接:http://www.avatarfinancial.com/pages/cake/ 这篇文章可以说是CakePHP教程中最经典的了.虽然不是完整的手把手系列, 但作者将自己使用CakePH ...

最新文章

  1. MEMS传感器的未来在哪?
  2. 2012传统行业转型年:整合拓展互联网发展渠道
  3. git bash命令_更优雅地使用命令行
  4. Android画布的保存,Android canvas用法介绍之save()和restore()
  5. 经典面试题(37):以下代码将输出的结果是什么?
  6. Kafka : kafka无法消费的情况
  7. vCenter Server Appliance 所需的端口
  8. BAT警示:没试过这个方法就别说会数据分析!!
  9. Win10桌面上:[ 我的电脑 ] 图标不见了
  10. paip.分布式应用系统java c#.net php的建设方案
  11. 【元胞自动机】基于matlab元胞自动机双通道交通【含Matlab源码 1657期】
  12. 视频开头独白怎么做?一分钟学会
  13. Keras或者Tensorflow出现:Optimization loop failed: Cancelled: Operation was cancelled
  14. 三菱q系列plc连接电脑步骤_三菱Q系列PLC 以太网通信设置方法
  15. Excel数值、文本相互转换
  16. GitHub是什么?GitHub如何使用?
  17. 微信开放平台之小程序获取用户信息
  18. 【P2P overlay network】跨内外网络虚拟私有云
  19. 面试分享:17道Python面试题,让你在求职中无往不利
  20. NFD开发指南-1.介绍

热门文章

  1. JVM 垃圾收集器CMS相关参数
  2. Redis 哨兵Sentinel 文档
  3. 【学亮IT手记】HashMap集合精讲
  4. 关闭输入流后,依然无法删除文件
  5. python处理表格数据教程_用Python的pandas框架操作Excel文件中的数据教程
  6. Java中外部类访问内部类的方法
  7. Linux 下 Redis 6 的安装使用(Ubuntu 18.04)
  8. 模式识别与机器学习课程笔记——决策树和贝叶斯估计
  9. python素数判断代码_Python 判断101-200之间有多少个素数,并输出所有素数
  10. python中的np where_python – np.where在我的熊猫中不起作用