ThinkPHP开发笔记-模型
1、模型定义。在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。
模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义:
namespace Home\Model;
use Think\Model;
class CategoryModel extends Model {
protected $trueTableName = 'top_categories';
protected $dbName = 'top';
}
2、模型实例化。根据不同的模型定义,我们有几种实例化模型的方法,根据需要采用不同的方式:
(1)直接实例化。可以和实例化其他类库一样实例化模型类,模型类通常都是继承系统的\Think\Model类,例如:
$User = new \Home\Model\UserModel();
// 带参数实例化
$New = new \Home\Model\NewModel('blog','think_',$connection);
(2)D方法实例化。D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的\Think\Model基类,同时对于已实例化过的模型,不会重复去实例化。
$User = D('User');
(3)M方法实例化。D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
$User = M('User');
(4)实例化空模型类。
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
3、数据库连接信息。系统默认会读取配置文件中的相关参数,包括:
'DB_TYPE' => '', // 数据库类型
'DB_HOST' => '', // 服务器地址
'DB_NAME' => '', // 数据库名
'DB_USER' => '', // 用户名
'DB_PWD' => '', // 密码
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 数据库表前缀
'DB_DSN' => '', // 数据库连接DSN 用于PDO方式
'DB_CHARSET' => 'utf8', // 数据库的编码 默认为utf8
上面实例化方法中直接实例化和M方法实例化,都可以传入数据库连接信息。数据库连接信息参数支持三种格式:
(1)字符串定义
new \Home\Model\NewModel('blog','think_','mysql://root:1234@localhost/demo');
(2)数组定义
$connection = array(
'db_type' => 'mysql',
'db_host' => '127.0.0.1',
'db_user' => 'root',
'db_pwd' => '',
'db_port' => ,
'db_name' => 'demo',
);
new \Home\Model\NewModel('new','think_',$connection);
(3)配置定义
//数据库配置1
'DB_CONFIG1' => array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '',
'db_host' => 'localhost',
'db_port' => '',
'db_name' => 'thinkphp'
),
//数据库配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp',
然后,我们就可以这样实例化模型类传入连接信息:
new \Home\Model\NewModel('new','think_','DB_CONFIG1');
new \Home\Model\BlogModel('blog','think_','DB_CONFIG2');
ThinkPHP开发笔记-模型的更多相关文章
- ThinkPHP开发笔记-用户登录注册
1.修改模块配置,Application/当前模块名/Conf/config.php <?php return array( //数据库配置信息 'DB_TYPE' => 'mysql', ...
- odoo开发笔记--模型中常用的方法
create方法在数据表中插入一条记录(或新建一个对象的resource)格式:def create(self,cr,uid,vals,context={})参数:vals:待新建记录的字段值,是一个 ...
- odoo开发笔记--模型字段compute用法
compute属性,实现的主要功能是,前端界面选择某个字段的时候,指定与该字段关联的其他字段可以关联,并联动的显示. 可以和inverse属性同时使用,不加inverse属性的话,前端界面的显示效果只 ...
- ThinkPHP开发笔记-前后端数据交互
此处就是 Controller 和 View 相互传数据. 1.Controller 向 View 的页面传数据.在控制器中把变量传递给模板,使用 assign 方法对模板变量赋值.例如: 在Cont ...
- ThinkPHP开发笔记-控制器
1.下面就是一个典型的控制器类的定义: <?php namespace Home\Controller; use Think\Controller; class IndexController ...
- ThinkPHP开发笔记-视图
1.如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值,而且assign方法必须在display和show方 ...
- odoo开发笔记 -- 模型字段定义中设置默认值
例如: company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env['res ...
- odoo开发笔记 -- 模型一对多tree视图弹窗效果实现
实现效果参考: 1. 开发者模式 -- 设置 -- 工作流 -- 编辑 -- 添加项目 2. 会计模块 -- 管理 -- 付款条款 -- 编辑/创建 实现方式,很简单.只要视图界面写个一对多关联字段就 ...
- odoo开发笔记 -- 模型后台方法返回前端form视图和tree视图的写法
待补充: 参考:工作单跳转到通关清单 --form(一对一) 工作单跳转到报关单列表 --tree (一对多)
随机推荐
- 具体解释linux下的串口通讯开发
串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...
- PHP魔术方法和魔术常量介绍及使用
魔术方法(Magic methods) PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __des ...
- Java 运算符及优先级
运算符 分割符: , ; [] () 算数运算符: + - * / % ++ -- 关系运算符: > < >= <= == != 逻辑运算符: ! & | ^ & ...
- Way to tmux
1. tmux ls: 显示所有会话(OR: Ctrl-b s)2. tmux new -s session-name: 新建会话3. 可以简单地输入tmux a命令,这样可以接入第一个可用的会话:t ...
- python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)
#可变变量:list, 字典#不可变变量:元祖,字符串字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / not ...
- javascript 闭包 内存
- CDOJ 1502 string(简单贪心)
题目大意:原题链接 相邻两个字母如果不同,则可以结合为前一个字母,如ac可结合为a.现给定一个字符串,问结合后最短可以剩下多少个字符串 解体思路:简单贪心 一开始读题时,就联想到之前做过的一道题,从后 ...
- Silly Java-Final 关键字
Final 关键字 adj. 最终的:最后的:决定性的:不可改变的 1.修饰变量 final variable 意味 [最后的变量,不可改变的变量即常量] Java中该关键字即代表常量 修饰基本类型的 ...
- HashMap底层原理
原文出自:http://zhangshixi.iteye.com/blog/672697 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射 ...
- JavaScript之从头再来
引入文件 1. 引入外部文件 <script type="text/javascript" src="JS文件"></script> 2 ...