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 (一对多)
随机推荐
- django-网页视屏播放
基本都基于第三方: -cc视频 -播放免费视频 -收费视频 -需要做认证,cc视频会给你发消息,你返回,携带数据 -在前端页面中添加响应的视屏框的代码 -功能实现,有相关接口文档,配置即可
- git学习------>git-rev-parse命令初识
一.准备工作 第一步:在d盘git test目录下,新建工作区根目录demo,进入该目录后,执行git init创建版本库. DH207891+OuyangPeng@DH207891 MINGW32 ...
- (0)linux下的Mysql安装与基本使用(编译安装)
一.大致操作步骤 环境介绍: OS:center OS6.5 mysql:5.6版本 1.关闭防火墙 查看防火墙状态:service iptables status 这样就意味着没有关闭. 运行以下命 ...
- TypeScript教程
汇智课堂 地址 http://www.hubwiz.com/course/55b724ab3ad79a1b05dcc26c/ TypeScript是一种由微软开发的自由和开源的编程语言.它是Java ...
- .........请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。
今天研究membership的时候出现的问题.在此记录一下. 解决办法就是,将"C:\Program Files (x86)\Microsoft Web Tools\Packages\Asp ...
- gcc __attribute__
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和 ...
- HTML5游戏开发系列教程7(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-7/ 今天我们将完成我们第一个完整的游戏--打砖块.这次教程中,将 ...
- android 显示internet 图片
try { HttpGet httpRequest = new HttpGet(edtUrl.getText() .toString()); HttpClient httpclient = new D ...
- C语言赋初始值
- Jackson /常用注解/ annotation(转)
1.@JsonAutoDetect 自动检测,(作用在类上)来开启/禁止自动检测. fieldVisibility:字段的可见级别 ANY:任何级别的字段都可以自动识别 NONE:所有字段都不可以自动 ...