首页 > 解决方案 > Laravel Switch 默认数据库连接动态不起作用

问题描述

我正在尝试连接到租户连接。当我执行

 ( new Tenant())->configure()->use();

签入日志

  \Log::info(DB::connection()->getDatabaseName());

它仍然指向主连接和数据库

 \Log::info(DB::connection('tenant')->getDatabaseName());

如果尝试上面它显示连接到正确的数据库;

如何重置数据库连接

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class Tenant extends Model
{
    use HasFactory;
    protected $connection = 'landlord';

    protected $guarded = [];
     /**
     *
     */
    public function configure()
    {
        config([
            'database.connections.tenant.database' => $this->database,
        ]);

        DB::purge('tenant');
        DB::reconnect('tenant');
        Schema::connection('tenant')->getConnection()->reconnect();

        return $this;
    }

    /**
     *
     */
    public function use()
    {
        app()->forgetInstance('tenant');

        app()->instance('tenant', $this);

        return $this;
    }
}

我使用 MongoDB 作为数据库;

如何将默认连接从 切换mongodbtenant

        DB::purge('tenant');
        DB::reconnect('tenant');
        Schema::connection('tenant')->getConnection()->reconnect();

此命令仍然不会更改默认连接。

我正在写日志

    \Log::info(DB::connection('tenant')->getDatabaseName());
    \Log::info(DB::connection()->getDatabaseName());

第一个日志指向正确的数据库。第二个日志指向默认数据库

我的config/databas.php

  'mongodb' => [
        'driver' => 'mongodb',
        'host' => env('MONGO_DB_HOST'),
        'port' => env('MONGO_DB_PORT', '27017'),
        'database' => env('MONGO_DB_DATABASE', 'sales_bot'),
        'username' => env('MONGO_DB_USERNAME', 'root'),
        'password' => env('MONGO_DB_PASSWORD', ''),
        'options' => [
            'database' =>  env('MONGO_DB_DATABASE') // sets the authentication database required by mongo 3
        ]
    ],    
    'tenant' => [
        'driver' => 'mongodb',
        'host' => env('MONGO_DB_HOST', '127.0.0.1'),
        'port' => env('MONGO_DB_PORT', '27017'),
        'database' => null,
        'username' => env('MONGO_DB_USERNAME', ''),
        'password' => env('MONGO_DB_PASSWORD', ''),

    ],

我的租户表有两条记录,分别是database名称laravelParavel

[2021-07-02 19:06:51] local.INFO: laravel  
[2021-07-02 19:06:51] local.INFO: salesbot  
[2021-07-02 19:06:51] local.INFO: paravel  
[2021-07-02 19:06:51] local.INFO: salesbot 

在日志中我看到上面的条目

标签: laravelmulti-tenant

解决方案


推荐阅读