继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕姐8265434
关注TA
已关注
手记 1147
粉丝 221
获赞 1064

需求

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP