在 Laravel 中使用多个数据库操作数据

李鹏0 4,313 次浏览

最近公司新项目有操作多个数据库的需求,我们准备选择在 PHP7.0 中使用  Laravel 5.2.

下面是我在操作过程中的一些纪要。

  • 1、定义连接
    在你的数据库配置文件 –  app/config/ database.php – 你可以定义任何类型的多个数据库连接。事实上,你可以定义尽可能多的连接,只要你愿意。例如,如果你的应用程序有2个 MySQL数据库中提取数据,则可以分别定义他们两个。
<?php
return array(

    'default' => 'mysql',

    'connections' => array(

        # 主数据库连接
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # 次数据连接
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);
  • 2、我们默认的连接(default)仍设置为 mysql 。这意味着,除非我们特别指定,应用程序将继续使用 mysql 连接。
  • 指定数据库连接 – 我们如何使用它的代码?

Schema :

使用 connection() 链接数据库

Schema::connection('mysql2')->create('lp_table', function($table)
{
    $table->increments('id'):
});

常用的数据库操作,类似于Schema,例如查询:

$users = DB::connection('mysql2')->select(...);

Eloquent:

您也可以定义你的数据库模型 (Model)使用.

一种方法是在模型中设置 $connection 连接变量:

 
<?php

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';
    .......
}

?>

另外一种方式是:

<?php

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2');

        $something = $someModel->find(1);

        return $something;
    }
    .......
}

?>

注意事项:
  • 一定要注意不要试图建立与多个数据库中的表与表的关系!

 

 

 

如果是同服务器跨库可以写成:

mysql为 protected $table = ‘snail.lp_user’;

 

 


发表评论

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen