关于如何在Laravel Artisan中使用自定义数据库链接
需求分析
打算用Laravel重写公司的帝国CMS,设计到一个栏目迁移的问题:将老站的栏目通过命令直接导入到新站数据库。所以需要链接老站数据库进行查询,需要链接新站数据库进行写入。
最后实现的方式
// 获取老旧class,并返回树形结构 protected function dealClassResult() { $connector = new Connector(); $conn = $connector->createConnection("mysql:dbname={$this -> conn_config['database']};host={$this -> conn_config['host']};port={$this -> conn_config['port']};charset=UTF8", ['username' => $this -> conn_config['username'], 'password' => $this -> conn_config['password']], $connector->getDefaultOptions()); $result = $conn -> query('select * from ' . $this -> conn_config['tbname'])->fetchAll(); array_walk($result, function ($v) use (& $class_data) { $class_data[$v['classid']] = $v; }); return $this->getClassTree($class_data, 0, 'bclassid', 'classid'); }
但是,感觉很不好,有更优雅的实现方式吗?
5 Comments
在 config/database.php 配置多个连接 然后在代码中通过 DB::connection() 指定要用的数据库实例:https://xueyuanjun.com/post/9576.html#toc_3
我这些参数都是获取的用户输入,直接写死不太好啊,
你还没明白:
这里你可以配置多个这样的配置项,名字换成其它的比如
mysql_old
,然后里面的配置成老站的数据库,然后在调用这个数据库进行增删改查的时候这样使用:DB::connection('mysql_old')->select(...)
这样连接的就是老的数据库了,并不是说这个配置里面只能配主站的数据库,你想配几个就配几个,敏感信息一样可以放到 .env 中,配置名和主站分开就好了你这个明显是一次性的命令 配置成用户输入费那个劲干嘛呢
好吧