首页 > 解决方案 > 用户登录帐户时如何更改表前缀?

问题描述

我在新的 laravel 中,在我的应用程序中当用户登录他的帐户时,我想更改 env 文件中的默认数据库前缀。我为每个用户设置通配符子域。当每个用户登录时,我想根据子域更改数据库前缀。

那么如果用户登录 Laravel,是否可以全局更改 laravel 前缀?如果有任何解决方案,请建议我。谢谢是提前。

标签: laravellaravel-middlewarelaravel-authentication

解决方案


当然可以:

配置/数据库.php

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    'mysql_earth' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_EARTH_DATABASE', 'earth'),
        'username' => env('DB_EARTH_USERNAME', 'earth'),
        'password' => env('DB_EARTH_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

  'mysql_moon' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_MOON_DATABASE', 'moon'),
    'username' => env('DB_MOON_USERNAME', 'moon'),
    'password' => env('DB_MOON_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=forge
DB_USERNAME=forge
DB_PASSWORD=forgepw

DB_EARTH_DATABASE=earth
DB_EARTH_USERNAME=erth
DB_EARTH_PASSWORD=earthpw

DB_MOON_DATABASE=moon
DB_MOON_USERNAME=moon
DB_MOON_PASSWORD=moonpw

在您的控制器示例中使用将您的条件放在连接上,然后您可以在每个数据库中进行查询:

$db = \DB::connection('mysql');
$db = \DB::connection('mysql_earth');
$db = \DB::connection('mysql_moon');

        $products = $db->table('products')
            ->distinct()
            ->select("*" )
            ->orderBy('products.id','asc')
            ->get();

推荐阅读