一、在Model类中进行切换【推荐】
1、全局切换
此Model类中所有的操作都是使用的$connection的配置参数
//在模型里单独设置数据库连接信息 protected $connection = array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '123456', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp', ); protected $connection = 'mysql://root:123456@localhost/thinkphp';
2、局限到某一方法
可能某些时候我们只是需要某一个方法去执行读取其他的数据库的操作
//config.php在项目配置中添加 'OTHER_DB_CONFIG' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '123456', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp',)或'OTHER_DB_CONFIG' => 'mysql://root:123456@localhost/thinkphp'配置项,是为了方便简介的设置而已,你在Model里定义也没事//YourModel.class.phppublic function switchDb(){ //此处的1为初次使用其他数据库链接时的设定的编号,以后在使用此链接时只需要db(1)即可,db(0)是默认的 $this->db(1,"OTHER_DB_CONFIG")->query(); //切换会默认的 $this->db(0);}
二、在M()实例化对象时切换
3、M方法实例化时切换
$model = M('TableName', 'db_','OTHER_DB_CONFIG');
不过我在使用中M()切换后此后的M()方法使用的数据库链接也都是切换后的,也就是说即便你之后的M()没有传入后两个参数,它也没有去使用项目配置里默认的,这让我有些苦恼,只能写在Model里了,虽然都是某个表的实例模型,但貌似M()切换会对其他的表的数据库链接造成影响,木找到回归默认链接的方法,知道的求告知补脑~