我想在我的系统中合并多个数据库.大多数情况下,数据库是MySQL;但它可能会在future 有所不同,即管理员可以生成这样一个报告,这是use source of heterogeneous数据库系统.
那么我的问题是does Laravel provide any Facade来处理这样的情况?或者有没有其他框架有更适合解决问题的能力?
我想在我的系统中合并多个数据库.大多数情况下,数据库是MySQL;但它可能会在future 有所不同,即管理员可以生成这样一个报告,这是use source of heterogeneous数据库系统.
那么我的问题是does Laravel provide any Facade来处理这样的情况?或者有没有其他框架有更适合解决问题的能力?
.env
>= 5.0 (Tested on 5.5) (Works on 8)In 100
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret
In 100
'mysql' => [
'driver' => env('DB_CONNECTION'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
如果DB_用户名和DB_密码相同,则可以使用
env('DB_USERNAME')
,这在前几行的.env
行中表示.
.env
<5.0Define Connections个
100
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database1',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database2',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
Schema个
要指定使用哪个连接,只需运行connection()
方法
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Query Builder
$users = DB::connection('mysql2')->select(...);
Eloquent个
在模型中设置$connection
变量
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
您还可以在运行时通过setConnection
方法或on
静态方法定义连接:
class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2'); // non-static method
$something = $someModel->find(1);
$something = SomeModel::on('mysql2')->find(1); // static method
return $something;
}
}
Note在try 跨数据库与表建立关系时要小心!这样做是可能的,但它可能附带一些警告,并且取决于您有什么数据库和/或数据库设置.
Using Multiple Database Connections
当使用多个连接时,您可以通过101 facade上的连接方法访问每个100.传递给100方法的102应该对应于104配置文件中列出的一个连接:
$users = DB::connection('foo')->select(...);
您还可以在连接实例上使用getPdo方法访问原始的基础PDO实例:
$pdo = DB::connection()->getPdo();
Useful Links