您当前的位置:首页 > 电脑百科 > 数据库 > 百科

Laravel同时连接多个数据库,你用啥办法?

时间:2020-07-24 10:18:56  来源:  作者:

引言

在巩固了基础知识之后,我们把目标转向框架的学习。Laravel 是一个全球流行的框架,开发者和使用者都比较活跃,周边有许多库,和第三方资源均提供了支持。

3分钟短文 | Laravel同时连接多个数据库,你用啥办法?

 

今天说一下,如何在框架里同时连接多个数据库?

学习时间

为什么需要连接多个数据库呢?因为,应用程序和数据库有可能不在同一台服务器。而数据库服务器,并不能包含所有的业务表。所以经过拆分的数据库需要我们建立多个连接。

一般我们在 .env 文件内指定本地或者线上使用的配置项。这样做比较灵活,很容易区分出不同的设置。

首先我们在 .env 文件内添加如下配置:

DB_CONNECTION=MySQL
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSword=secret

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret 

当然 DB_HOST 可以是任何远程的数据库,或者本地的数据库资源。有多少个,就需要手动定义多少个,只是把常量加以区分,以便在程序内读取。

接着在配置目录数据库配置项 config/database.php 内添加这些连接:

'mysql' => [
    'driver'    => env('DB_CONNECTION'),
    'host'      => env('DB_HOST'),
    'port'      => env('DB_PORT'),
    'database'  => env('DB_DATABASE'),
    'username'  => env('DB_USERNAME'),
    'password'  => env('DB_PASSWORD'),
],

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

其中 “mysql”和“mysql2”就是数据库连接 $connection 的别名,用以区分不同的资源。如果方便记忆,可以使用诸如 “mysql_server_a”"mysql_server_b" 这样的符号。

数据库操作

如果你遵循框架的数据库操作方式,首先是进行表的迁移,那么创建在 migrations 内,指定给哪个数据库创建表,则需要这样写:

Schema::connection('mysql2')->create('some_table', function($table)
{
    $table->increments('id');
}); 

对于查询操作,使用原生的方式,需要明确指定从某个连接操作sql,需要这样写:

$users = DB::connection('mysql2')->select(...);

当然了,我们不推荐在程序内进行原生sql操作,因为这样破坏了数据库表字段的可追溯性,也丧失了 Eloquent ORM 的强大功能。

所以我们使用模型操作数据库,那么指定某个 Model 使用哪个数据库的哪个表,只需要在模型文件内显式声明:

class SomeModel extends Model
{
    protected $connection = 'mysql2';
}

这样,程序内对于 SomeModel 的所有操作就都是针对 “mysql2”这个连接所指向的数据库。

Laravel 的灵活还不止这一点半点,如果在Model内不指定$connection,你还可以在控制器内,在命令行程序内,在队列内,在中间件内,在监听器内,都可以任意指定某个Model连接:

class SomeController extends BaseController {
    public function someMethod()
    {
        $someModel = new SomeModel;
        $someModel->setConnection('mysql2'); // 非静态方法
        $something = $someModel->find(1);
        $something = SomeModel::on('mysql2')->find(1); // 静态方法
        return $something;
    }
}

这样优雅灵活的用法,有没有眼前一亮!

写在最后

本文通过多种方法,演示了Laravel从数据库连接配置,到程序内使用的方方面面。还没有体验这个框架的同学,你真的值得一试了。



Tags:Laravel   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
环境配置:系统:Linux语言:PHP框架:Laravel 5.8主要技术:Zizaco/Entrust扩展包,MySQL,PHP,Composer 扩展包名称:Zizaco/Entrust安装配置:// 1. 在项目根目录运行composer require ziza...【详细内容】
2021-02-05  Tags: Laravel  点击:(611)  评论:(0)  加入收藏
使用laravel的数据库迁移功能进行表的创建,和迁移回滚之后,我们继续说说在设计中 表结构的更改之后的处理。以及如何为数据库填充一些伪数据作为测试。数据约束上一章说到数据...【详细内容】
2020-09-29  Tags: Laravel  点击:(135)  评论:(0)  加入收藏
使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?今天就...【详细内容】
2020-09-28  Tags: Laravel  点击:(78)  评论:(0)  加入收藏
我刚开始接触Laravel这个框架时,被官方文档搞得一头雾水,几天都没搭建起来运行环境(可能是自己太菜了哈哈,自信点把可能去掉)一、安装 Composer进入官网 getcomposer.org,点击down...【详细内容】
2020-09-18  Tags: Laravel  点击:(44)  评论:(0)  加入收藏
laravel已经内置了一套授权和权限分配的功能,我们不用从零开始设计,这方便了很多。但是, 因为集成在框架内的缘故,很多时候对于用户体系甚至有些陌生。本文通过一个简单的需求,判...【详细内容】
2020-08-26  Tags: Laravel  点击:(51)  评论:(0)  加入收藏
这篇文章主要给大家介绍了关于利用laravel搭建一个迷你博客的相关资料,文中将一步步的实现步骤通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟...【详细内容】
2020-08-18  Tags: Laravel  点击:(64)  评论:(0)  加入收藏
引言数据库操作是应用程序不可避免的绝大多数。难怪有些老程序员总是略带自嘲地说,“不就是个 curd 嘛,说的那么高深!” 的确,往简单了说,编程不过是增删改查数据库。高级程序员,...【详细内容】
2020-07-30  Tags: Laravel  点击:(75)  评论:(0)  加入收藏
引言在巩固了基础知识之后,我们把目标转向框架的学习。Laravel 是一个全球流行的框架,开发者和使用者都比较活跃,周边有许多库,和第三方资源均提供了支持。 今天说一下,如何在框...【详细内容】
2020-07-24  Tags: Laravel  点击:(138)  评论:(0)  加入收藏
Laravel是当今最熟练,流行和广泛使用的开源框架之一。Laravel具有多种功能,例如模板引擎,MVC架构支持,安全性高,开发者工具,数据库迁移等。这些Laravel高级功能使它比其他PHP框架...【详细内容】
2020-06-12  Tags: Laravel  点击:(64)  评论:(0)  加入收藏
laravel框架基础知识一、laravel简介laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全;今天我们一起来看看框架的基础知识二、版本选择本篇学习笔记...【详细内容】
2019-12-20  Tags: Laravel  点击:(86)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条