使用Laravel Eloquent在同一服务器上的不同数据库中加入两个MySQL表

Ima*_*ghi 5 php mysql database laravel

我在两个不同的数据库中有两个表.两个数据库都托管在同一AWS RDS服务器上.我有一个用户帐户可以访问这两个数据库.我在config\database.php中定义了两个不同的连接:

return array(
    'default' => 'mysql',
    'connections' => array(
        # Our primary database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'samehost',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
        # Our secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'samehost',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

我有两个模型用于table1连接database1table2连接database2.两个表都有一列id.如何使用Eloquent模型为具有相同行的行加入查询id

Ima*_*ghi 12

这个解决方案对我有用:

Model1::where('postID',$postID)
      ->join('database2.table2 as db2','Model1.id','=','db2.id')
      ->select(['Model1.*','db2.firstName','db2.lastName'])
      ->orderBy('score','desc')
      ->get();
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法在表名的配置中使用 $connection ?数据库名称在不同环境中可能不同 (2认同)

rah*_*hul 6

如果两个数据库位于同一连接上并且设置为默认值,则可以尝试这种方式。

$query = DB::table('database1.table1 as dt1')->leftjoin('database2.table2 as dt2', 'dt2.ID', '=', 'dt1.ID');        
$output = $query->select(['dt1.*','dt2.*'])->get();
Run Code Online (Sandbox Code Playgroud)

我已经在我的本地主机上尝试过它的工作。