phpcms自定义模型操作数据库?

文章描述:

phpcms如何自定义模型操作数据库,可以对数据库数据进行新增、修改、删除、查询呢?

phpcms自定义模型操作数据库操作如下:

数据库操作

新建数据表

在数据库里面新建一张数据表v9_demo,数据表里面字段有id、title、listorder,数据表建好以后方便我们对数据库操作。

新建控制器文件

在phpcms/modules/admin模块下面新建一个myadmin.php文件,在头部加入判断是否定义了“IN_PHPCMS”这个静态变量,如果没定义就退出当前程序显示No permission resources和实例化admin模块类,代码如下:

defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_app_class('admin','admin',0);

定义文件类名和函数创建一个新的 SimpleXMLElement 对象,载入模型类文件,代码如下:

function __construct()
{
    parent::__construct();
    $this->db = pc_base::load_model('news_model');
}

新建模型文件

这时需要在phpcms/model/下面新建一个news_model.class.php文件,里面代码如下:

defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('model', '', 0);
class news_model extends model {
    public $table_name = '';
    public function __construct() {
        $this->db_config = pc_base::load_config('database');
        $this->db_setting = 'default';
        $this->table_name = 'demo';
        parent::__construct();
    }
}

数据库操作

在控制器里面新建一个init()方法,在方法里面首先判断是否为管理员用户

$tree = pc_base::load_sys_class('tree');
 
$userid = $_SESSION['userid'];
$admin_username = param::get_cookie('admin_username');

查询数据

select()

查询数据表里面所有数据

$result = $this->db->select('', '*', '', 'listorder ASC,id DESC');
$array = array();
foreach ($result as $r) {
    $array[] = $r;
}
print_r($result);

get_one()

查询指定ID的一条数据

$id = 1;
$r = $this->db->get_one(array('id'=>$id));

insert()

向数据库里面插入数据

$datas = array(
    'title'=>'hello'
);
$this->db->insert($datas);

update()

修改指定ID文章的内容

$data = array(
    'title'=>'hello',
    'listorder'=>'1'
);
$this->db->update($data,array('id'=>$id));

delete()

指定ID删除文章内容

$this->db->delete(array('id'=>2));

phpcms如何获取数据表名

echo $table_name = $this->db->table_name;
echo "<hr>";
echo $this->db->table_name.'_data';

自定义分页多表

phpcms自定义模型查询多表分页代码如下:

模型

自定义分页多表查询,将会在phpcms/model/下面get_model.class.php里面新增自定义多表查询方法,代码如下:

public function multi_listinfo($where = '', $page = 1, $pagesize = 12, $key='', $setpages = 10,$urlrule = '',$array = array()) {
   $sql = preg_replace('/select([^from].*)from/i', "SELECT COUNT(*) as count FROM ", $where);
   // echo $sql;
   $this->sql_query($sql);
   $c = $this->fetch_next();
   $this->number = $c['count'];
   $page = max(intval($page), 1);
   $offset = $pagesize*($page-1);
   $this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages);
   //分页
   $r = $this->sql_query($where.' LIMIT '.$offset.','.$pagesize);
   while(($s = $this->fetch_next()) != false) {
      $data[] = $s;
   }
   return $data;
}

控制器

在phpcms/modules/admin/myadmin.php控制器里面添加自定义查询表语句、分页、指定模板

$keyword = '';
//这里是查询条件采用下面的多表联合查询
$where = " WHERE a.title like '%".$keyword."%'" ;
$where .= " OR c.title like '%".$keyword."%'" ;
//这里用到了left join查询
$sql = "SELECT a.id,a.title,b.id AS bid,c.title AS ctitle FROM v9_news as a LEFT JOIN v9_news_data as b ON a.id = b.id ";
//
$sql .= " LEFT JOIN v9_demo as c ON a.id = c.id";
//
$order = " order by a.id desc";
$sql= $sql.$where.$order;
//引入第一步修改的get_model.class.php文件
$get_db = pc_base::load_model('get_model');
//在get_model.class里面定义的multi_listinfo方法
$page = intval($_GET['page'])?intval($_GET['page']) :'1';
$infos = $get_db->multi_listinfo($sql,$page,$pages = '1');
//返回查询结果
$pages = $get_db->pages;
//返回分页
//        var_dump($infos);
//        var_dump($pages);
//        echo $this->admin_tpl('myadmin');
include $this->admin_tpl('myadmin');

模板

在phpcms/modules/admin/templates/下面新增一个myadmin.tpl.php文件,代码如下:

<?php
if(is_array($infos)){
    foreach($infos as $info){
        ?>
        <tr>
            <td><?php echo $info['title'];?></td>
            <td><?php echo $info['bid'];?></td>
            <td><?php echo $info['ctitle'];?></td>
        </tr>
        <?php
    }
}
?>
<div id="pages"> <?php echo $pages?></div>

 

发布时间:2021/08/06

发表评论