需求
A项目,需要获取B、C项目的数据表的字段结构,用于实现自定义列表。
解决方法
在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' => '' ],
下面是获取代码
//获取其他数据库连接 $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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦