FuelPHP 系列(三) ------ Model 模型
框架封装好的 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 模型的更多相关文章
- keras系列︱Sequential与Model模型、keras基本结构功能(一)
引自:http://blog.csdn.net/sinat_26917383/article/details/72857454 中文文档:http://keras-cn.readthedocs.io/ ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- Javascript事件模型系列(一)事件及事件的三种模型
一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...
- Python-Django学习笔记(三)-Model模型的编写以及Oracle数据库的配置
Django使用的 MTV 设计模式(Models.Templates.Views) 因此本节将围绕这三部分并按照这个顺序来创建第一个页面 模型层models.py 模型是数据唯一而且准确的信息来源. ...
- 10、ASP.NET MVC入门到精通——Model(模型)和验证
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 模型就是处理业务,想要保存.创建.更新.删除的对象. 注解(通过特性实现) DisplayName Required StringLengt ...
- Backbone源码解析(二):Model(模型)模块
Model(模型)模块在bk框架中的作用主要是存储处理数据,它对外和对内都有很多操作数据的接口和方法.它与视图(Views)模块精密联系着,通过set函数改变数据结构从而改变视图界面的变化.下面我们来 ...
- django Model模型二及Model模型对数据库的操作
在django模型中负责与数据库交互的为Model层,Model层提供了一个基于orm的交互框架 一:创建一个最基本的Model from __future__ import unicode_lite ...
- Atitit.web三编程模型 Web Page Web Forms 和 MVC
Atitit.web三编程模型 Web Page Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...
- tp框架-----Model模型层
1.Model模型层是用来做什么的呢? 主要是用来做操作数据库访问的.也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型. 2.Model模型怎样使用呢? 要使用Model模型层访问数 ...
- sed修炼系列(三):sed高级应用之实现窗口滑动技术
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
随机推荐
- 11.C++和C的区别,什么是面向对象
c++封装更好,调用接口,c调用子函数 1.首先C和C++在基础语句上没有太大区别,c++在c基础上改进,兼容大部分c的语法结构.c++面向对象,c面向过程. 2.新增new和delete的语法,引用 ...
- MP实战系列(十二)之封装方法详解(续二)
继续MP实战系列(十一)之封装方法详解(续一)这篇文章之后. 此次要讲的是关于查询. 查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事. 1.selectB ...
- WorldWind源码剖析系列:代理助手类ProxyHelper
代理助手类ProxyHelper通过平台调用的互操作技术封送了若干Win32结构体和函数.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: 内嵌类型WINHTTP_AUTOPROX ...
- 学习Kali Linux必须知道的几点
Kali Linux 在渗透测试和白帽子方面是业界领先的 Linux 发行版.默认情况下,该发行版附带了大量入侵和渗透的工具和软件,并且在全世界都得到了广泛认可.即使在那些甚至可能不知道 Linux ...
- JAVA框架 Spring 事务
一.我们之前在hibernate的时候,需要直接写事务,需要绑定当前线程保证获取同一个连接,虽然hibernate的帮我们封装绑定当前现成的操作,但是需要我们手动的去开启和关闭事务. 而spring帮 ...
- OpenGL笔记(三) GLSL语法与内建函数
GLSL,OpenGL Shading Language,GLSL中没有指针,并且没有任何类型的字符串或字符. (1)GLSL的修饰符与基本数据类型 const:用于声明非可写的编译时常量变量: at ...
- hdu 1505 City Game (hdu1506加强版)
# include <stdio.h> # include <algorithm> # include <string.h> # include <iostr ...
- 解决Ubuntu14.04安装Chrome浏览器打不开的问题
1.安装Chrome浏览器 wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ ...
- struts2_E_commerce_maven
这是作业的第二题:使用struts实现电子商务网站,这是基于之前的代码的,所以,主要就是修改成为struts的mvc模式. 1.开始,先把以前做的一个maven项目修改成为另一个项目(简称重命名) 重 ...
- 大数据入门第十六天——流式计算之storm详解(三)集群相关进阶
一.集群提交任务流程分析 1.集群提交操作 参考:https://www.jianshu.com/p/6783f1ec2da0 2.任务分配与启动流程 参考:https://www.cnblogs.c ...