#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. затем вам нужно запросить таблицы с постоянным префиксом, который вы устанавливаете при входе пользователя в систему