框架封装好的 model 类有几个,按需继承就好。

有:/fuel/core/classes/model/crud.php

  /fuel/packages/orm/classes/model.php

  /fuel/packages/orm/classes/model/soft.php  包含软删除的相关方法

  /fuel/packages/orm/classes/model/nestedset.php

  /fuel/packages/orm/classes/model/temporal.php

  /fuel/core/classes/model.php

/fuel/packages/orm/classes/ 目录下类功能比较多,所以多数情况选择继承这个目录下的 model。

在 /fuel/app/classes/model/ 目录下,可以直接新建,也可以创建一级目录再新建。注意所有的文件名都要小写(Linux)。

一、创建 model 文件

  1、在 model 目录下新建 article.php,文件中 Article 类继承 Orm\Model

  class Model_Article extends Orm\Model{}

  2、在 model/new/ 目录下新建 tag.php,文件中 New 类继承 Orm\Model_Soft

    oil 命令: php oil g model new/tag name:varchar --no-migration   或  php oil g model new_tag name:varchar --no-migration

  class Model_New_Tag extends Orm\Model_Soft{}

  3、在 model 目录下新建 category.php,文件中 Category 类继承 \Model_Crud

  namespace Model;

  class Category extends \Model_Crud{}

  4、在 model/new/ 目录下新建 test.php,文件中 Test 类继承 Orm\Model_Temporal

  namespace Model\New;

  class Test extends Orm\Model_Temporal{}

  如果定义了 namespace 则在控制器中调用 Model 时,需要在 model 类名前面加命名空间或在文件最上面 use 命名空间下的类名。

  use Model\New\Test;
  class Controller_Article extends \Controller
  {
  public function action_index()
  {
  $test = Test::forge();
}
  }

二、设置静态属性

  1、设置表名  protected static $_table_name = 'myarticles';

    如果数据库表名是 model 类名去掉 ‘Model_’ 后的复数形式,则不要要设置。

  2、设置主键  protected static $_primary_key = array('aid', 'bid');

    如果表中主键为 id 且只有 id ,则不需要设置

  3、设置表列  protected static $_properties = array('id', 'name', 'create_at', 'update_at');

    也可以设置列属性,数据类型 type、标签 label、验证规则 validation、input 类型 form、默认值 default 等。

  protected static $_properties = array(
'id',
'name' => array(
'data_type' => 'varchar',
'label' => 'Article Name',
'validation' => array('required', 'min_length' => array(3), 'max_length' => array(20)),
'form' => array('type' => 'text'),
'default' => 'New article',
),
'gender' => array(
'data_type' => 'varchar',
'label' => 'Gender',
'form' => array('type' => 'select', 'options' => array('m' => 'Male', 'f' => 'Female')),
'validation' => array('required'),
),
'created_at' => array(
'data_type' => 'int',
'label' => 'Created At',
'form' => array(
'type' => false, // this prevents this field from being rendered on a form
),
),
'updated_at' => array('data_type' => 'int', 'label' => 'Updated At')
);

  4、设置数据约束条件

  protected static $_conditions = array(
  'order_by' => array('id' => 'desc'),
  'where' => array('del_flg', '!=', 1),
  );

  5、设置关联模型  protected static $_has_one, $_belongs_to, $_has_many, $_many_many

    一对一、一对多、反向一对多、多对多

  6、设置数据库  protected static $_write_connection = 'articles_master_db'; protected static $_connection = 'articles_slave_db';

    在 /fuel/app/config/db.php 文件中配置数据库信息。

    如果数据库设置了主从服务器,实现读写分离,则 $_write_connection 为写数据库,$_connection 为读数据库。

    如果只有一个数据库,则用 $_connection 设置。

    如果有关联模型,则应保证相互关联的模型有相同的读写数据库。

  7、设置隐藏数据  protected static $_to_array_exclude = array( 'password', 'login_hash', 'salt‘, );

    返回查询的数据时,忽略敏感信息,比如用户密码、加密规则等。

  8、设置模型事件

  protected static $_observers = array(
'Orm\Observer_CreatedAt' => array(
'events' => array('before_insert'),
'property' => 'INS_DATE',
'mysql_timestamp' => false,
),
'Orm\Observer_UpdatedAt' => array(
'events' => array('before_update'),
'property' => 'UPD_DATE',
'mysql_timestamp' => false,
),
);

    关于 observer ,后面会有详细介绍。

FuelPHP 系列(三) ------ Model 模型的更多相关文章

  1. keras系列︱Sequential与Model模型、keras基本结构功能(一)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72857454 中文文档:http://keras-cn.readthedocs.io/ ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...

  4. Python-Django学习笔记(三)-Model模型的编写以及Oracle数据库的配置

    Django使用的 MTV 设计模式(Models.Templates.Views) 因此本节将围绕这三部分并按照这个顺序来创建第一个页面 模型层models.py 模型是数据唯一而且准确的信息来源. ...

  5. 10、ASP.NET MVC入门到精通——Model(模型)和验证

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 模型就是处理业务,想要保存.创建.更新.删除的对象. 注解(通过特性实现) DisplayName Required StringLengt ...

  6. Backbone源码解析(二):Model(模型)模块

    Model(模型)模块在bk框架中的作用主要是存储处理数据,它对外和对内都有很多操作数据的接口和方法.它与视图(Views)模块精密联系着,通过set函数改变数据结构从而改变视图界面的变化.下面我们来 ...

  7. django Model模型二及Model模型对数据库的操作

    在django模型中负责与数据库交互的为Model层,Model层提供了一个基于orm的交互框架 一:创建一个最基本的Model from __future__ import unicode_lite ...

  8. Atitit.web三编程模型 Web Page Web Forms 和 MVC

    Atitit.web三编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...

  9. tp框架-----Model模型层

    1.Model模型层是用来做什么的呢? 主要是用来做操作数据库访问的.也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型. 2.Model模型怎样使用呢? 要使用Model模型层访问数 ...

  10. sed修炼系列(三):sed高级应用之实现窗口滑动技术

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

随机推荐

  1. leetcode18—4Sum

    Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...

  2. Jmeter—实现识别验证码登录

    在做自动化测试或压力测试时,验证码总是一个问题.在以往的压力测试经历中,测试一般在独立的测试环境中进行,可以放心禁用验证码或使用万能验证码,这个是最实用的.但是,这两天我尝试了一个使用第三方的图形图像 ...

  3. 【转】软件质量之道:SourceMonitor

    转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...

  4. P1341 无序字母对

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  5. tar 压缩 解压 打包命令

    01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压 ...

  6. [浅谈CSS核心概念] CSS布局模型:float和position

    1.流动模型 HTML元素在默认情况下都是按照"流动模型"进行布局的,网上也有人称之为"普通流"."文档流"之类的.这种布局模式的特点在于: ...

  7. 20155306 白皎 0day漏洞——漏洞利用原理之DEP

    20155306 白皎 0day漏洞--漏洞利用原理之DEP 一.DEP机制的保护原理 1.为什么出现DEP? 溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计 ...

  8. cocos2d-x学习记录3——CCTouch触摸响应

    游戏不同于影音,强交互性是其一大特色,在游戏中主要体现为接受用户的输入并响应.智能手机触摸是其重要的输入方式. 在cocos2d-x中,触摸分为单点触摸和多点触摸. 单点触摸:主要继承CCTarget ...

  9. Spark内存管理

    本文基于Spark 1.6.0之后的版本 Spark 1.6.0引入了对堆外内存的管理并对内存管理模型进行了改进,SPARK-11389. 从物理上,分为堆内内存和堆外内存:从逻辑上分为executi ...

  10. effective c++ 笔记 (9-12)

    //---------------------------15/03/29---------------------------- //#9    绝不在构造和析构过程中调头virtual函数 { / ...