如何使用Laravel Eloquent在不同服务器上的多个数据库之间执行Join查询?

时间:2015-05-15 06:32:38

标签: php mysql laravel join laravel-5

这就是我们如何使用Laravel处理多个数据库连接,这是一个 PHP框架而不是 Python (对于谁来认为这是一个重复的帖子)

<?php
return array(

    'default' => 'mysql',

    'connections' => array(

        # Our primary database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Our secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

这就是你连接这个数据库的方式。

$user1 = User::on('mysql1')->where(/* ... */)->get()
$user2 = User::on('mysql2')->where(/* ... */)->get()

这些只是SELECT查询。因此,Eloquent完美无瑕地工作。

但是,当我想在这两个数据库之间执行 JOIN查询操作时,这似乎是不可能的。

4 个答案:

答案 0 :(得分:1)

如果这两个数据库位于不同的服务器上,则无法执行此操作。至少不是简单的。我读到了storage engine。但我以前从未尝试过这样做。

<强> BUT

如果数据库位于同一台服务器上,您可以通过简单的加入来实现,如果用户拥有正确的权限

答案 1 :(得分:0)

基本上,您不能使用Eloquent ORM或Laravel的查询构建器来执行此操作。

但是,您可以尝试使用原始表达式(https://github.com/laravel/framework/blob/8865d2276be94f0a3497ba3bd26c906ae9e91e1c/src/Illuminate/Database/Query/Expression.php#L13)或smth,但是您必须编写代码以根据查询结果创建模型。

如果您使用laravel 4,此问题可以提供帮助:Laravel 4: how to run a raw SQL?

答案 2 :(得分:0)

编写原始查询并使用laravels DB方法来转义数据。

$results = DB::select( DB::raw("SELECT Users.id, Properties.name FROM [Database1].[dbo].[Users] join [Database2].[dbo].[Properties] on Users.id = Properties.user_id where [so].[dbo].[Users].id = :user_id"), array('user_id' => Input::get('user_id', -1)));

答案 3 :(得分:0)

您不能在不同的数据库服务器之间进行mysql连接,这是mysql的限制,与laravel或雄辩的语言无关。

您最好的选择是使用已有的2个不同的数据库连接,然后通过php代码合并并查询数据。