ORM简单的表达就是:外部输入的东西,所有能够自动映射到数据库里面。实现这样一个思路,就须要对输入到数据库表单和字段所有有个读取缓存(通常都会有一个缓冲文件用来储存对应的数据表和对应的基本字段信息)
show tables ; 列出全部数据表
$result = mysql_query("show tables");
$tables = mysql_fetch_array($result,MYSQL_ASSOC);
讲数据表所有导入到一个数组里面。对于每一个数据库表
而后读取每一个数据表的columns,并放入$tmp['Field'](字段的属性包括字段名,类型,是否为空,默认值,是不是主键,自动递增)
储存为一个$array[$field]的数组函数
foreach($tables as $val) {
$sql = "show columns from $val";
$res1 = mysql_query($sql);
while ($tmp=mysql_fetch_array($res1,MYSQL_ASSOC)){
$array[$tmp['Field']] = array(
'name' => $tmp['Field'],
'type' => $tmp['Type'],
'null' => $tmp['Null'],
'default' => $tmp['Default'],
'primary' => (strtolower($tmp['Key']) == 'pri'),
'autoinc' => (strtolower($tmp['Extra']) == 'auto_increment'),
);
}
}
将所有信息组成一个三维数组array($tablename=>array($fieldname=>array("name"=>$fieldname)))。
拿到了数据表所有的数组和对应的字段信息后,就能够开始进行ORM类型操做。
能够进行的操做包括:
1.数据插入前的字段检测(检测插入某个对应的数据库是否是所属字段,将多余的不是表的字段过滤掉)
2.实例化数据操做好比Model("test")这种的时候,没有找到对应的类,能够直接进行的操做进行统一封装。好比M('test')->add($arr) 这种格式
能够自动进行的操做是检测数组里包含的字段 插入数据表里面(若是是D('test')这种会优先读取指定model路径里面进行实例化,而后调用对应的方法类。
能够将不少基本的动做比CURD类的基本操做(能够直接操做数据表,并且是单表的操做)能够用一些特定的方法进行封装(TP就是利用这种思想进行封装的)
这样大幅度的增长了开发的效率。
3.能够将该表存在缓存里面,能够快速的相应一些数据库信息的查询
ORM还有另一个巨大的好处,能够直接建立对应的数据表后,能够直接调用基本方法,这样设计数据数据表的时候,有着很是好的拓展性。
定义数据表的功能能够直接移植到系统后台,大幅度增长应用场景的灵活性。也能够直接从后台导出
例如:
mysql
show create table test1; (会显示table和建立该table须要的语句)sql