首页 > 解决方案 > 使用 PHP Laravel 2019 在 postgres 中加入来自不同数据库的 2 个或多个表

问题描述

在 postgres 中连接来自不同数据库的 2 个表的 Laravel 语法是什么?

例如:

database1 table column
join
database2 table column

标签: phplaravelpostgresqljoin

解决方案


你可以这样做:

配置:

定义 config/database.php 多个数据库的连接:

        'pg' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            ...
       ];
        'pg_2' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST_ONLINE', '127.0.0.1'),
            'port' => env('DB_PORT_ONLINE', '3306'),
            'database' => env('DB_DATABASE_ONLINE', 'forge'),
            'username' => env('DB_USERNAME_ONLINE', 'forge'),
       ];
       ...

并在模型中设置连接:

class Model1 extends Model 
{
    protected $connection = 'pg';
}
class Model2 extends Model
{
    protected $connection = 'pg_2';
}

用法:

您可以轻松地从不同的数据库中获取 Eloquent 或查询构建器:

Model2::join('database1_name.table AS table1', 'table1.id', '=', 'model2.table_id')
       ->where(...)
       ->select('model2.*', 'table1.column')
# OR
\DB::connection('pg_2')->table('model2')
                       ->join('database1_name.table AS table1', 'table1.id', '=', 'model2.table_id')
                       ->where(...)
                       ->select('model2.*', 'table1.column')

推荐阅读