我们在PHPCMSV9中调用某一个表的时候,只有两个方法:
第一,采用PHPCMS自带的方法,在model文件夹里建立xxx.model.class.php数据模型,里面写上需要调用的表名,然后采用pc_base::load_model(‘xxx_model’);来进行调用,弊端就是每个表要创建一个model文件,很多很麻烦。
第二个方法就是写SQL来调用,这个是比较差的方法了。
有没有既不需要创建model或者说只创建一个model,又不需要写SQL语句,并且可以重复利用的方法呢,现在有了。
方法如下,还是要至少要创建一个model数据模型的:
第一步,在/phpcms/model里创建一个getis.class.php文件,放入下面代码:
<?php defined('IN_PHPCMS') or exit('No permission resources.'); pc_base::load_sys_class('model', '', 0); class getis extends model { public $table_name; public function __construct() { $this->db_config = pc_base::load_config('database'); parent::__construct(); } /** * 设置数据表 * @param tablename 需要调用的表 */ public function table_name($tablename,$db_setting) { $this->db = db_factory::get_instance($db_config)->get_database($db_setting); $this->table_name = $this->db_config[$db_setting]['tablepre'].$tablename; return $this->table_name; } } ?>
第二步在/phpcms/libs/functions/extention.func.php里放入下面代码:
function D($tabname,$db_setting='default'){ $data = pc_base::load_model('getis'); $db_config = $db_setting; $data->table_name($tabname,$db_config); return $data; }
这样就可以使用全局函数D()来进行调用数据库里任意的一个数据表了,参考方法如下
$db = D('link'); $r = $db->get_one(array('linkid'=>'1'),'*','linkid DESC'); var_dump($r);
D全局函数默认是调用当前数据库里的数据表,如果是调用另一个数据库,请先参照https://www.zhoutao.org/blog/2016/04/560.html 只在caches/configs/database.php里添加数据库链接信息,然后就可以加上第二个参数如:$db = D(‘link’,’forum’); 来进行使用了