TimoPHP支持操作多个数据库,框架采用单例模式来获取某个数据库实例,并且采用单例模式来获取数据库连接
return [
'mysql' => [
'default' => [
'host' => 'localhost',
'port' => 3306,
'database' => 'timophp',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
'rw_separate' => false,
],
'course' => [
'host' => 'localhost',
'port' => 3306,
'database' => 'timo_course',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
'rw_separate' => false,
]
]
];
我这里单独提出来说一下,一般我们不推荐使用表前缀这个配置项,很多老的数据库设计都会在表名前面加一个没有含义的前缀,如“tb_”,我们不推荐这么做,那该怎么做呢?
我们一个项目可能有不同的模块,好的设计是不同模块放在不同的数据库,但是,一般项目前期都放到了一个数据库,比如,我们一个“课程”、“问答”、“用户”三个模块
,命名如下:
course
course_category
...
question
question_answer
question_category
...
user
user_info
...
<?php
use Timo\Orm\Db;
$user = Db::table('user')->row();
<?php
use Timo\Orm\Db;
$db = Db::connect('course'); //获取course这个数据库的实例
<?php
use Timo\Orm\Db;
$db_config = [
'host' => 'localhost',
'port' => 3306,
'database' => 'timo_course',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
'rw_separate' => false,
];
$db = Db::connect($db_config);
<?php
//获取某个用户
$user = $db->table('user')->where(38698)->row()
$user = $db->table('user')->where('id', 38698)->row();
$user = $db->table('user')->where('id', '=', 38698)->row();
//获取文章列表
$archives = $db->table('archive')->where('cid', '>', 3)->order('id DESC')->select()
$archives = $db->table('archive')->where(['cid' => ['>', 2], 'status' => 1])->order('id DESC')->select()
以上是简单列举了两个例子,更多使用方法查看数据库方法
设置配置项rw_separate为true就开启读写分离,并且要配置slave配置项,可以配置一个或多个,如下面就配置了2个从数据库
return [
'mysql' => [
'course' => [ //主库
'host' => '192.168.0.200',
'port' => 3306,
'database' => 'timo_course',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
'rw_separate' => true,
'slave' => [ //从库
[
'host' => '192.168.0.201',
'port' => 3306,
'database' => 'timo_course',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
],
[
'host' => '192.168.0.202',
'port' => 3306,
'database' => 'timo_course',
'charset' => 'utf8',
'user' => 'root',
'password' => 123456,
'prefix' => '',
],
],
],
],
];