为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
PHP

需求

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;



作者:mowww
链接:https://www.jianshu.com/p/e091b221a963


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消