我无法使用 Laravel 进行动态迁移
I can't migrate dynamically with Laravel
我正在为每个有记录的用户创建一个数据库。我可以通过配置设置这个创建的数据库。但是我不能迁移。
我遇到的错误是:
数据库 [5d7acdf5adf6a] 未配置。
$user=User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'database'=>uniqid()
]);
Artisan::call('make:database',['dbname'=>$user->database]);
$this->connectAnother($user->database);
Artisan::call('migrate',['--database'=>$user->database]);
dd(Artisan::output());
error-->Database [5d7acdf5adf6a] not configured.
connectAnother是我写的方法
public function connectAnother($database){
\Config::set("database.connections.mysql", [
"host" => "127.0.0.1",
"database" => $database,
"username" => "...",
"password" => "..."
]);
}
config/database.php:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'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' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
换数据库的时候试过直接迁移,得到了答案'Nothing to migrate'
这是解决方案
public function connect($database){
$connection = [
'driver' => 'mysql',
'url' => config('database.connections.mysql.url'),
'host' => config('database.connections.mysql.host'),
'port' => config('database.connections.mysql.port'),
'database' => $database,
'username' => config('database.connections.mysql.username'),
'password' => config('database.connections.mysql.password'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
];
\Config::set("database.connections.{$database}", $connection);
DB::setDefaultConnection($database);->***The most important place in this line***
我正在为每个有记录的用户创建一个数据库。我可以通过配置设置这个创建的数据库。但是我不能迁移。 我遇到的错误是:
数据库 [5d7acdf5adf6a] 未配置。
$user=User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'database'=>uniqid()
]);
Artisan::call('make:database',['dbname'=>$user->database]);
$this->connectAnother($user->database);
Artisan::call('migrate',['--database'=>$user->database]);
dd(Artisan::output());
error-->Database [5d7acdf5adf6a] not configured.
connectAnother是我写的方法
public function connectAnother($database){
\Config::set("database.connections.mysql", [
"host" => "127.0.0.1",
"database" => $database,
"username" => "...",
"password" => "..."
]);
}
config/database.php:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'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' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
换数据库的时候试过直接迁移,得到了答案'Nothing to migrate'
这是解决方案
public function connect($database){
$connection = [
'driver' => 'mysql',
'url' => config('database.connections.mysql.url'),
'host' => config('database.connections.mysql.host'),
'port' => config('database.connections.mysql.port'),
'database' => $database,
'username' => config('database.connections.mysql.username'),
'password' => config('database.connections.mysql.password'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
];
\Config::set("database.connections.{$database}", $connection);
DB::setDefaultConnection($database);->***The most important place in this line***