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

需求

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

解决方法

  1. 在A项目配置B项目数据库的账号密码,用于连接B数据库。
  • 在.env文件中
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表看看,就懂了。

  • 在config/database.php中
  '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;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 郝思嘉与韩媚兰是小说《飘》里的女一号和女二号,对于这部小说,我比较喜欢厦门大学李美华老师的译本,文笔流畅,亲切自然...
    i青弓子阅读 2,414评论 1 2
  • 明星学员代表着孩子在英语学习过程中的坚持与努力,我们深信,在孩子英语成绩不断提高,视野不断开阔的道路上,不光有外教...
    遇见好运气阅读 466评论 0 0
  • 上午蹭了一个心理讲座。之所以会有这样的一次经历,一是因为一起学习的妹子透露信息给我;二是因为宝爸给力,帮我...
    实验中学45阅读 246评论 0 1

友情链接更多精彩内容