ThinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式如下:
创新互联公司专注于企业成都全网营销推广、网站重做改版、繁昌网站定制设计、自适应品牌网站建设、html5、成都商城网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为繁昌等各大城市提供网站开发制作服务。
Class UserModel extends Model{
protected $_map = array(
'name' ='username', // 把表单中name映射到数据表的username字段
'mail' ='email', // 把表单中的mail映射到数据表的email字段
);
}
这样,在表单里面就可以直接使用name和mail名称作为表单数据提交了。在保存的时候会字段转换成定义的实际数据表字段。字段映射还可以支持对主键的映射。
如果我们需要把数据库中的数据显示在表单中,并且也支持字段映射的话,需要对查询的数据进行一下处理,处理方式是调用Model类的parseFieldsMap方法,例如:
// 实例化User模型
$User = M('User');
$data = $User-find(3);
这个时候取出的data数据包含的是实际的username和email字段,为了方便便表单输出,我们需要处理成字段映射显示在表单中,就需要使用下面的代码处理:
$data = $User-parseFieldsMap($data);
这样一来,data数据中就包含了name和mail字段数据了,而不再有username和email字段数据了。
4
对象关系映射(ObjectRelationalMapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
一个简单的映射例子(hibernate),我们定义User对象和数据库中user表之间的关联,user表中只有两列:id和name。
hibernate-mapping
classname="sample.orm.hibernate.User"table="user"catalog="test"
idname="userID"type="java.lang.Integer"
columnname="id"/
generatorclass="assigned"/
/id
propertyname="userName"type="java.lang.String"
columnname="name"/
/property
/class
/hibernate-mapping
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。可以在PHP开发的业务逻辑层,通过数据访问层来处理。ORM就是数据访问层强大的一种解决方案。通过它,可以最大限度隔离业务逻辑层和数据源之间的耦合度
Active Record(AR)是一个对象-关系映射(ORM)技术。
每个AR 类代表一张数据表(或视图),数据表(或视图)的字段在 AR 类中体现为类的属性,一个AR 实例则表示表中的一行。常见的CRUD 操作作为 AR 的方法实现。比如:
Data access object(DAO,数据访问对象),比如可以建立在PHP的数据对象(PDO)扩展上,使得用单一的统一接口可以访问不同的数据库管理系统(DBMS)。比如:
找出区别。