LARAVEL如何连接2个不同的数据库并加入不同服务器上的2个表?

时间:2016-09-22 09:59:03

标签: php mysql laravel

我有2个不同的数据库,我想在这些数据库中内连接2个表。

我知道这不是最佳做法,但我需要找到一种方法与LARAVEL合作。

我可以通过打开2个连接来使用普通的PHP来做到这一点。但我正在寻找用laravel做到这一点的方法。

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

添加另一个连接是解决方案,但我将如何在1个内连接查询中的2个不同服务器中使用两个数据库?

1 个答案:

答案 0 :(得分:1)

由于我正在使用不同的实体进行映像,因此只需使用连接名称定义protected $connection属性,即可在模型中指定每个实体的连接。

您可以通过在config/database.php中定义新连接来创建新连接。

像这样:

class Model_One extends Entity
{
    protected $connection = "database_one";

    [...]

class Model_Two extends Entity
{
    protected $connection = "database_two";

    [...]
'connections' => [

    'database_one' => [
        'driver'    => 'mysql',
        'host'      => env('DB_ONE_HOST', 'host_one'),
        'port'      => env('DB_ONE_PORT', 3306),
        'database'  => env('DB_ONE_DATABASE', 'database_one'),
        'username'  => env('DB_ONE_USERNAME', 'username'),
        'password'  => env('DB_ONE_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => env('DB_ONE_PREFIX', ''),
        'timezone'  => env('DB_ONE_TIMEZONE', '+00:00'),
        'strict'    => false,
    ],

    'database_two' => [
        'driver'    => 'mysql',
        'host'      => env('DB_TWO_HOST', 'host_two'),
        'port'      => env('DB_TWO_PORT', 3306),
        'database'  => env('DB_TWO_DATABASE', 'database_two'),
        'username'  => env('DB_TWO_USERNAME', 'homestead'),
        'password'  => env('DB_TWO_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => env('DB_TWO_PREFIX', ''),
        'timezone'  => env('DB_TWO_TIMEZONE', '+00:00'),
        'strict'    => false,
    ]
],