ThinkPHP 之 ORM操作和关联模型

ActiveRecord是Rails进行数据库操作的核心组件。它采用标准的ORM模型,将表映射到类,将行记录映射到实例对象,将字段映射到对象的属性。


对象关系映射
M方法快捷实例化模型后 对象直接调用字段并赋值,可直接调用add方法进行新增,直接调用find方法参数为主键值即可获得当条数据,直接调用select方法参数为众多主键值即可获取每条符合主键值的条目数据,直接调用find方法参数为主键值并直接调用其字段更改字段值并直接调用save方法即可完成一条数据的更新,直接调用delete方法参数为主键值即可删除当条数据记录。

!!!!!!!!!明日任务 将goods的增删改查用动态记录orm完成一遍!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

验证

create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或save方法才会真正写入数据库。create方法如果没有传值,默认取$_POST数据,如果用户提交标量内容,含有可执行htl代码应手工过滤。非法处理可用 htmlspecialchars方法
data方法也是创建数据对象的方法 ,也会支持传入数组和对象,使用data方法创建的数据对象不会进行自动验证和过滤操作。同样也会自动过滤非法的数据类型和不存在的字符串。
create()函数工作流程:获取数据源,验证数据源的合法性,检查字段映射,判断提交状态新增或者是编辑,数据自动验证,表单令牌验证,表单数据赋值,数据自动生成,生成数据对象;
调用自定义模型 在自定义模型中定义 protected $_validate = array();数组就是验证条件
array()里的array(‘验证的字段名’,‘验证规则’,‘提示’,条件 0为字段存在时验证,1为必须验证,2为数据存在时验证!!!!!!!这里还需要在研究!!只能留到明日了!!!!!!!!!,‘附加条件’,数据执行状态1为增加2为更新 3为全部 一般3默认)是具体的条件,具体的 有字段唯一性 长度 范围 不为空 密码格式验证  判断相同验证 回调函数验证

自动完成
同样在自定义模型端创建 保护 变量 $_auto = array();
同样 array里面 还有具体的 array('填充字段',‘填充规则’,填充时间1为增加2为更新3为全部,‘附加规则 function callback field string默认’)

而这两项都会在create方法执行中的数据验证进行验证!

另外 除了在自定义数据模型端进行 保护变量赋值 还可以在活动段创建数据规则 并调用模型对象的 setProperty方法 给_validate _auto 分别赋上之前创建的数据规则 最后执行create方法即可!



ThinkPHP的orm和三大自动

M方法和D方法区别

orm



create填充源码


自动验证



自动填充


自动映射(_map源码)





M方法和D方法的区别

ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。

使用M方法

如果是如下情况,请考虑使用 M方法:

  1. 对数据表进行简单的 CURD 操作而无复杂的业务逻辑时
  2. 只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用

M方法 甚至可以简单看着就是对参数表名对应的数据表的操作:

$User = M('User'); 

使用D方法

如果是如下情况,请考虑使用 D方法:

  1. 需要使用 ThinkPHP 模型中一些高级功能如自动验证功能(create()方法中实现)、关联模型等
  2. 业务逻辑比较复杂,且涉及的表众多
  3. 将业务逻辑定义在了自定义的模型类里面(Lib/Model目录下),而想在操作中实现这些业务逻辑

另外 D方法 不支持跨项目调用,需要使用:

$User = D('User', 'Admin');    // 实例化 Admin 项目下面的 User 模型 $User = D('Admin.User');        // 启用了项目分组 

提示

启用了项目分组后,Model 类并不必然对应着项目分组。多个项目组之间共有的模型类,统一放在 Model 目录下,可以直接使用D('ModelName') 实例化。而 D('User.UserInfo') 并不表示 User 一定是一个项目分组,也可以仅仅是对 Model 下文件的一个分类目录,D('User.UserInfo') 实例化的是 User 目录下的 UserInfo 模型类。

总结

M方法 和 D方法 都可以在模型类文件不存在的情况下直接使用的,但显然 M方法 更高效;但要使用模型类里面业务逻辑,就必须使用 D方法。

一个比较形象的比喻就是:M方法 就如一台刚装好操作系统的电脑,只能使用一些基本功能;而 D方法 就如在装好的系统上再安装了一些如 Office、QQ 等应用软件,功能更加强大,同时整个电脑运行速度也变慢了。

以上是对 M方法和D方法区别的一些总结,M方法 和 D方法 要根据实际情况来具体选择。

(http://blog.163.com/litianyichuanqi@126/blog/static/115979441201223043452383/)

D()和M()方法的区别:

D和M的区别主要在于

M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现

而D方法必须有创建模型类。

我们可以用下面两种方法去创建一个数据表的映射对象

第一种:$Test = D(‘Test’)

第二种:$Test = new Model(‘Test’)

虽然这两种都可以对数据进行select,insert,delete,udpate操作,在

数据验证上有很大的不同,

用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);

如果用第二种就没有了这个数据验证功能,需要手动验证。

总结如下:

D函数实例化的是你当前项目的Lib/Model下面的模块。
如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。
而M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。

通俗点说:
D就是实例化一个基于Model文件的Model。
M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。

再通俗一点说:
M实例化参数是数据库的表名。
D实例化的是你自己在Model文件夹下面建立的模型文件。
D就是在你没有定义模型的时候,系统自动帮你定义一个模型,这样你才进行简单的数据输入或者输出。
每一个Action文件都应该对应Model文件的,如果你定义了Model的话,
如:$Form = D(“User”)就可以改成$Form = new  UserModel();(User是指你的模型文件名)。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 中进行高级的 MySQL 操作,可以使用模型来实现。模型是一种对象关系映射(ORM)工具,它允许你通过 PHP 代码来操作数据库,而不需要编写 SQL 语句。 以下是一些常见的 ThinkPHP 模型操作: 1. 查询数据 使用模型的 select() 方法可以查询数据库中的数据。例如: ``` $users = UserModel::select(); ``` 可以使用 where() 方法添加查询条件。例如: ``` $users = UserModel::where('age', '>', 18)->select(); ``` 可以使用 find() 方法查询单条数据。例如: ``` $user = UserModel::where('id', 1)->find(); ``` 2. 插入数据 使用模型的 save() 方法可以插入数据到数据库中。例如: ``` $user = new UserModel; $user->name = 'John'; $user->age = 20; $user->save(); ``` 3. 更新数据 使用模型的 save() 方法可以更新数据库中的数据。例如: ``` $user = UserModel::where('id', 1)->find(); $user->name = 'John Smith'; $user->save(); ``` 可以使用 update() 方法更新多条数据。例如: ``` UserModel::where('age', '>', 18)->update(['is_adult' => true]); ``` 4. 删除数据 使用模型的 delete() 方法可以删除数据库中的数据。例如: ``` $user = UserModel::where('id', 1)->find(); $user->delete(); ``` 可以使用 destroy() 方法删除多条数据。例如: ``` UserModel::where('age', '<', 18)->destroy(); ``` 以上是一些常见的 ThinkPHP 模型操作,你还可以使用其他高级操作,如聚合查询、关联查询等。具体可参考 ThinkPHP 的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值