Как изменить префикс таблицы при входе пользователя в учетную запись?

#laravel #laravel-middleware #laravel-authentication

#laravel #laravel-промежуточное программное обеспечение #laravel-аутентификация

Вопрос:

Я нахожусь в новой laravel, в моем приложении, когда пользователь входит в свою учетную запись, я хочу изменить префикс базы данных по умолчанию из файла env. Я настраиваю поддомен с подстановочными знаками для каждого пользователя. Когда каждый пользователь входит в систему, я хочу изменить префикс базы данных в соответствии с поддоменом.

Итак, возможно ли изменить префикс laravel глобально, если пользователь входит в Laravel?. Пожалуйста, подскажите мне, есть ли какое-либо решение. Заранее спасибо.

Комментарии:

1. как это работает? У вас есть централизованная база данных, которая, очевидно, используется для входа в систему как пользователь. Вы могли бы использовать несколько баз данных, определенных в .env и в config/databases.php с помощью DB::подключение к определенной базе данных, но, на мой взгляд, это не самое чистое решение

2. @Alpi: Да, вы правы, но я пытаюсь сказать, что мне нужно динамически устанавливать префикс таблицы. у каждого пользователя разный набор таблиц, но мы не можем определить все эти префиксы в файле .env. приведем пример, если user.app.com является ли домен, то после входа в систему измените префикс по умолчанию на user. Вы понимаете? (Я отредактировал вопрос)

Ответ №1:

Конечно, вы можете:

config/database.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();
  

Комментарии:

1. Спасибо за ваш ответ. Я понял, но здесь у нас есть только одна база данных. База данных содержит другой набор таблиц с другим префиксом. И когда пользователь входит в систему, нам нужно динамически изменять префикс.

2. затем вам нужно запросить таблицы с постоянным префиксом, который вы устанавливаете при входе пользователя в систему