cms和自定义表单的原理

233 阅读1分钟

1、模型
模型表(存放生产的表信息)
创建模型就是创建一个新的表
2、栏目管理
用于关联模型、栏目、视图的表
3、内容管理
根据栏目添加相关模型表的内容、表单自生成

所以下面类库可以使用哦

<?php
//用于查看特定表的详细设计信息
//desc 是 describe的缩写
//describe用于查看特定表的详细设计信息
//describe($tablename) 
//查询出表的列信息
//show_columns_from($tablename)
//这个是查询建表语句
//show_create_table($tablename)  
//删除字段
//alter_table_drop($tablename, $field)
//修改字段
//alter_table_change($tablename, $oldfield, $newfield, $field_type, $isnot, $as) 
/* 修改字段
 * * $tablename 表名
 * $field 字段名
 * $field_type 字段类型
 * $isnot 是否为空
 * $as 字段注释
 * 

添加字段alter_table_add($tablename, $field, $field_type, $isnot, $as)
$tablename 表名
$field 字段名
$field_type 字段类型
$isnot 是否为空
$as 字段注释
删除表 drop_table($oldtablename)
修改表名create_table($oldtablename, $newtablename)
 创建表 create_table($tablename, $as) 
 */
class DbExtension
{
    
 
  /**
 * 批量更新函数
 * @param $data array 待更新的数据,二维数组格式
 * @param $table string 更新的表名
 * @param string $field string 值不同的条件,默认为id
 * @param array $params array 值相同的条件,键值对应的一维数组
 * @return bool|string
 */  
  public function batchUpdate($data=[],$table='user',$field="id")
{
 
      
        if(count($data)==0 || empty($table)) return "" ;
        //获取所有的id
        $data_keys = array_keys($data);

        $col = Db::query("SHOW COLUMNS FROM `".$table."`");
 
        $cols = [];
        array_map(function($value) use(&$cols){
            $cols[] = $value['Field'];
        },$col);
        //拼接批量更新sql语句
        $sql = "UPDATE {$table} SET ";
        //合成sql语句
        foreach ($data[$data_keys[0]] as $key => $value) {
            if(!in_array($key,$cols)) continue;
            $sql .= "{$key} = CASE  ".$field." ";
            foreach ($data as $k=>$v) {
                  $str= $v[$key];
                    $needle= '+';
                    $pos = strpos($str, $needle);
                    if($pos){
                         $z=explode("+",$v[$key]);
                        $sql .= sprintf("WHEN %d THEN '%s'+ %e", $k, $z[0],floatval($z[1]));
                    }else{
                           $sql .= sprintf("WHEN %d THEN '%s' ", $k, $v[$key]);
                    }
               
            }
            $sql .= "END, ";
        }
        //把最后一个,去掉
        $sql = substr($sql, 0, strrpos($sql,','));

        //合并所有id
        $ids = implode(',', $data_keys);
        //拼接sql
        $sql .= " WHERE ".$field." IN ({$ids})";
        return $sql;
      //  dump($userModel->execute($sql));
  
}
 

//距离排序 字段生成
	public function latlngfield($lat, $lng,$latfield="lat", $lngfield="lng", $returnfield="juli") {
            $sql=" ROUND( 6378.138 * 2 * ASIN(  SQRT(  POW(  SIN(  ( ";
            $sql.= $lat." * PI() / 180 - ".$latfield." * PI() / 180  ) / 2 ), 2  ) + COS( ";
            $sql.= $lat." * PI() / 180) * COS( ".$latfield." * PI() / 180) * POW(  SIN(   (   ";
            $sql.= $lng." * PI() / 180 -  ". $lngfield." * PI() / 180 ) / 2  ), 2  ) ) ) * 1000 ) AS   " .$returnfield.""; 
            return $sql;
	}
//创建表
	public function create_table($tablename, $as) {
		$sql = "create table " . $tablename;
		$sql .= " (id int not null auto_increment,typeid varchar(40) not null  comment '类别id', ";
		$sql .= "creationtime int(10) not null comment  '创建时间',updatetime int(10) not null comment  '更新时间' ,";
		$sql .= "primary key ( id ))auto_increment = 1 engine=MyISAM default charset=utf8 COMMENT='" . $as . "'";

		Db::query($sql);
	}

	//修改表名
	public function create_table($oldtablename, $newtablename) {

		$sql = "rename table " . $oldtablename . " to " . $newtablename . "";
		Db::query($sql);
	}

	//删除表
	public function drop_table($oldtablename) {
		$sql = "drop table " . $oldtablename;
		Db::query($sql);
	}

	/*
	 * 添加字段
	 * $tablename 表名
	 * $field 字段名
	 * $field_type 字段类型
	 * $isnot 是否为空
	 * $as 字段注释
	 * */
	public function alter_table_add($tablename, $field, $field_type, $isnot, $as) {
		$sql = "alter table " . $tablename . " add " . $field . " " . $field_type . " " . $isnot . " " . " comment '" . $as . "'";
		Db::query($sql);
	}

	//修改字段
	/* 修改字段
	 * * $tablename 表名
	 * $field 字段名
	 * $field_type 字段类型
	 * $isnot 是否为空
	 * $as 字段注释
	 * */
	public function alter_table_change($tablename, $oldfield, $newfield, $field_type, $isnot, $as) {
		$sql = "alter table " . $tablename . " change " . $oldfield . " " . $field . " " . $field_type . " " . $isnot . " comment '" . $as . "'";
		Db::query($sql);
	}
 
	//删除字段
	public function alter_table_drop($tablename, $field) {
		$sql = "alter table " . $tablename . " drop column " . $field;

		Db::query($sql);
	}

	//用于查看特定表的详细设计信息
	//desc 是 describe的缩写
	//describe用于查看特定表的详细设计信息
	public function describe($tablename) {
		$sql = "describe  " . $tablename;
		Db::query($sql);
	}

	//查询出表的列信息
	public function show_columns_from($tablename) {
		$sql = "show columns from  " . $tablename;
		Db::query($sql);
	}

	//这个是查询建表语句
	public function show_create_table($tablename) {
		$sql = "show create table  " . $tablename;
		Db::query($sql);
	}
	//这个是查询建表语句
	public function show_create_table($tablename) {
		$sql = "show create table  " . $tablename;
		Db::query($sql);
	}

}