ThinkPHP3.2.3手册阅读

模型


模型定义

  1. 命名规则:模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如:

模型名 约定对应数据表(假设数据库的前缀定义是 think_)
UserModel   think_user
UserTypeModel   think_user_type

模型实例化

在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。
根据不同的模型定义,我们有几种实例化模型的方法,根据需要采用不同的方式:

  1. 直接实例化 $User = new \Home\Model\UserModel();
  2. 带参数实例化New  = new \Home\Model\NewModel('blog','think_',connection);
  3. 数据库连接方式
    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'     =>   '12345',
    'db_port'    =>    3306,
    'db_name'    =>    'demo', 
);
new \Home\Model\NewModel('new','think_',$connection);
  1. 配置定义
//数据库配置1
'DB_CONFIG1' => array(
     'db_type'  => 'mysql',
     'db_user'  => 'root',
     'db_pwd'   => '1234',
     'db_host'  => 'localhost',
     'db_port'  => '3306',
     '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');

CURD操作

  1. 数据创建/编辑 user=M(user); user->create(); $user->add()/save(),根据表单提交的数据自动创建对象,也支持连贯操作,field(),filter(),alias()之类,前提name字段要写对。
  2. 如果需要更改或添加 $user->name=’wanglas’。
  3. setField()支持修改单个字段,或者传入数组。
  4. setInc(),setDec()可传入字段,数量,延迟多久后进行修改(秒)。
  5. 开启AR(activeRecord模式) user>where(id=8)>find() user->find(8); $uer->delete(8);
  6. 字段映射 : ThinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式如下:
namespace Home\Model;
use Think\Model;
Class UserModel extends Model{
     protected $_map = array(
         'name' =>'username', // 把表单中name映射到数据表的username字段
         'mail'  =>'email', // 把表单中的mail映射到数据表的email字段
     );
}
  1. 这样在表单里面就可以直接使用name和mail名称作为表单数据提交了。我们使用create方法创建数据对象的时候,会自动转换成定义的实际数据表字段。 同时在读取数据的时候 如果要控制输出对象的字段名称需要开启 ‘READ_DATA_MAP’=>true 或者直接使用parseFieldsMap方法进行转换处理,例如
// 实例化User模型
$User = D('User');
$data = $User->find(3);
$data = $User->parseFieldsMap($data);

引用:

Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
在计算机领域中,表示编译器为每个被激活的函数分配的内存空间。
活动记录一般都存在栈中。因为栈结构比较简单,硬件能够支持。
Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和 Row Gateway 的区别。著名的例子是全栈(Full Stack) Web 开发框架 Ruby on Rails ,其默认使用一个纯 Ruby 写成的 Active Record 框架来驱动 MVC 中的模型层。
在 Martin Fowler 的 《企业应用架构模式》 一书中曾详细叙述了本模式。
以下是著名的 Active Record 驱动框架:
SQLObject(Python)
Ruby on Rails ActiveRecord (Ruby)
Yii Framework ActiveRecord (PHP)
Castle ActiveRecord (.NET)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值