zoukankan      html  css  js  c++  java
  • CakePHP之Model

    模型

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

    通常模型类用来表示数据,并且在 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 }

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

  • 相关阅读:
    散列
    红黑树
    发散二叉搜索树
    二叉搜索树的删除和联结
    平衡树
    二叉搜索树的划分
    在二叉搜索树的根进行插入
    paper169:2020CVPR文章解读:nestedVAE:Isolating common facters via weak supervision
    paper 168: 2018-FATTEN 论文解析-feature space transfer for data augmentation
    paper 167:GPU的使用Theano之tutorial
  • 原文地址:https://www.cnblogs.com/victorruan/p/3564065.html
Copyright © 2011-2022 走看看