ThinkPHP3.2.3在连接数据库时,如果在某个模型类里面定义了connection
属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:
//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ protected $connection = array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp', 'db_charset' => 'utf8', 'db_params' => array(), // 非必须 ); }
也可以采用字符串方式定义,定义格式为:
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
例如:
//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ //或者使用字符串定义 protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8'; }
注意:字符串方式可能无法定义某些参数,例如前缀和连接参数。
如果我们已经在配置文件中配置了额外的数据库连接信息,例如:
//数据库配置1'DB_CONFIG1' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp', 'db_charset'=> 'utf8', ), //数据库配置2 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
那么,我们可以把模型类的属性定义改为:
//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ //调用配置文件中的数据库配置1 protected $connection = 'DB_CONFIG1'; }
//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class InfoModel extends Model{ //调用配置文件中的数据库配置1 protected $connection = 'DB_CONFIG2'; }