自动创建model模型类第三方函数

#1 klboy

function modelcreate(){
        $server=$GLOBALS['G_SP']['db']['host'];
                  $user=$GLOBALS['G_SP']['db']['login'];
                  $pass=$GLOBALS['G_SP']['db']['password'];
                  $dbname=$GLOBALS['G_SP']['db']['database'];
                  $conn=mysql_connect($server,$user,$pass);
                  if(!$conn) die("数据库系统连接失败!");
                  $result=mysql_list_tables($dbname);
                  if(!$result) die("数据库连接失败!");
                  $row=mysql_fetch_row($result);
                  foreach ($row as $k=>$v){
                          $sql = "describe $v";
                          $re=mysql_query($sql);
                                while($rowzj = mysql_fetch_array($re)){

                                if($rowzj['Key']=='PRI'){
                                 $zjarray[]= $rowzj['Field'];
                                break;
                                }
                                }
                  }
                  
                  mysql_free_result($result);
                  mysql_close($conn);
               
                  $modeldir = $GLOBALS['G_SP']['model_path'];
                  $temp = scandir($modeldir);
                 
                 
                 
                  if(is_array($temp)){
                           array_shift($temp);
                 array_shift($temp);
                 
                if(empty($temp)){
                        foreach($row as $k=>$v){
                                        $data = 'class lib_'.$v.' extends spModel
{
var $pk = "'.$zjarray[$k].'";//主键
var $table = "'.$v.'";//数据库名称
}';

                                        $file = $modeldir."/lib_$v.php";
                                file_put_contents($file,$data);
                                }
                               
                        }else{
                               
                                foreach ($temp as $v){
                                        preg_match_all('/lib_(.*).php/',$v,$match);
                                        $libarray[]= $match[1][0];
                                }
                                foreach ($row as $k=>$v){
                                        if(!in_array($v,$libarray)){
                                        $data = 'class lib_'.$v.' extends spModel
{
var $pk = "'.$zjarray[$k].'";//主键
var $table = "'.$v.'";//数据库名称
}';

                                        $file = $modeldir."/lib_$v.php";
                                file_put_contents($file,$data);
                                        }
                                }
                               
                                foreach ($libarray as $v){
                                        if(!in_array($v,$row)){
                                                $delfile = $modeldir."/lib_$v.php";
                                                @unlink($delfile);
                                        }
                                }
                               
                        }
                 
                         
                  }
}
每次新建数据库表后,又要在model创建模型类,感觉重复操作,虽然只是几行代码,但是每次创建不是很爽,写了这个自动创建的函数,把这个函数放入一个自定义文件,存放在include文件夹,然后在主配置文件index.php spRun()之前加入import('modelcreate.php');
随便找个地方调用一下modelcreate();就自动同步数据库表创建模型类了。如果已经创建过的不会影响,如果数据库没有对应表的会自动删除多余的模型类



2014-08-12 17:37:41

#2 jake

看看手册,spDB的功能 http://www.speedphp.com/thread-3777-1-1.html

用spDB就不需要再为这些小model写个文件了,直接spDB(表名)即可按原来的使用方法。

除非model类是非常大的,才需要建个文件。

2014-08-12 21:54:31

#3 klboy

spDB的限制(不支持的操作)
spPager
spLinker
spCache
spVerifier

这些正好经常用到,而且这条:在使用spDB出现错误的时候,建议建立模型类看看是否能够解决问题。

也遇到过,所以一般还是建一个文件好

2014-08-13 09:26:01

#4 jake

有没有发现,spDB的限制(不支持的操作)
spPager
spLinker
spCache
spVerifier

这些都是要设置model属性的,也就是一个简单只有table和pk的class是不够的,要加上附加的其他东西。

所以,spDB的意义在于,如果仅仅是生成一个简单有着table和pk的class,那么用spDB就可以代替,正如你上面代码所做的——仅仅生成一个简单的class

如果要复杂的,spDB做不到的,上面代码也做不到的,也是要添加新的代码才能做到。

总而言之,建立不建立model文件都可以,取决于你要不要高级功能,善用spDB即可。大可不用纠结于建不建个文件,或者用什么方法来建。

2014-08-13 09:31:06

#5 klboy

了解了,谢谢老大这么认真解答。我多此一举了。呵呵

2014-08-13 09:44:43

#6 jake

klboy 发表于 2014-8-13 09:44
了解了,谢谢老大这么认真解答。我多此一举了。呵呵
{:soso_e181:},你的钻研精神很好的。遇到问题解决问题,这是我们开发人员的天性嘛。

2014-08-13 10:37:23