欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel 使用多个数据库的问题。有大用

这几天在使用Laravel 开发一个系统。这个系统连2个数据库。一个名为blog,一个名为center。 

center 数据库的作用是作为用户中心。可能会有其他几个系统相连,属于公用数据库。主要是用来用户登录认证。 blog 数据库的作用是放文章,不会牵扯到认证方面。

我的想法是使用center数据库作为用户的登录认证,登录以后在发文章切换到blog数据库。

目前我的.env配置如下

DB_HOST=localhost
DB_DATABASE=blog
DB_DATABASE_CENTER=center
DB_USERNAME=root
DB_PASSWORD=root

database.php 里设计如下

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],
    'mysql_center' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE_CENTER', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

我自己建立的model User.php 是可以通过下面这种方式切换数据库的。

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    protected $connection = 'mysql_center';

但是系统自带的例子Controller 要怎么切换数据库呢?

app\Http\Controllers\Auth\AuthController.php
app\Http\Controllers\Auth\PasswordController.php

希望大家能帮忙解答一下,谢谢!

  • Controller应该是不对应数据库的,系统自带的例子也是通过一个User Model来对应数据库的,在系统自带的User Model中使用protected $connection = 'mysql_center' 就可以切换数据库了。

  • lovecn
    lovecn
     ⋅ 2年前

    在查询的时候,指明声明的连接名称 $users = DB::connection('mysql_center')->select(...);

  • ymlluo
    ymlluo
     ⋅ 2年前

    User::on('mysql_center')->where('username',$username).......

  • sun
    sun
     ⋅ 2年前

    这个写的不错,可以看看不同场景下的使用示例 http://fideloper.com/laravel-multiple-database-connections

来自 https://laravel-china.org/topics/984/the-problem-of-using-multiple-databases-in-laravel

普通分类: