Laravel开发实践PHP经验分享Laravel框架相关

laravel配置多个数据库连接及获取数据库表结构

2018-10-20  本文已影响7人  mowww

需求

A项目,需要获取B、C项目的数据表的字段结构,用于实现自定义列表。

解决方法

  1. 在A项目配置B项目数据库的账号密码,用于连接B数据库。
DB_CONNECTION=mysql_sea
DB_PORT=3306
DB_HOST_B=127.0.0.1
DB_DATABASE_B=information_schema
DB_USERNAME_B=root
DB_PASSWORD_B=

注意这里连接的是information_schema这个库。【INFORMATION_SCHEMA 数据库】 是MySQL自带的,它提供了访问数据库 元数据 的方式。什么是 元数据 呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。不清楚的,可以打开这个库的column表看看,就懂了。

  'mysql_B' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_B', 'localhost'),
            'port' => env('DB_PORT_B', '3306'),
            'database' => env('DB_DATABASE_B', 'forge'),
            'username' => env('DB_USERNAME_B', 'forge'),
            'password' => env('DB_PASSWORD_B', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
            'prefix'    => ''
        ],
  1. 下面是获取代码
    //获取其他数据库连接
    $databases = array_where(config('database')['connections'], function ($value,$key) {

        return $value && strstr($key,'mysql_') ;

    });

    $data = [];

    foreach($databases as $connectName => $value){
        //这里是把需要获取的B数据库名写在连接名后面,即mysql_B
        $base = last(explode('_',$connectName));

        $tmp = \DB::connection( $connectName)->select("
            select TABLE_SCHEMA,COLUMN_NAME,TABLE_NAME,COLUMN_COMMENT 
            from information_schema.COLUMNS 
            where TABLE_SCHEMA = '{$base}' "
        );

        $collection = collect( $tmp);

        $database  = $collection->first()->TABLE_SCHEMA;

        $data[$database]  = $collection->groupBy('TABLE_NAME')->toArray();
    }

    return $data;
上一篇下一篇

猜你喜欢

热点阅读