【问题标题】:I can't migrate dynamically with Laravel我无法使用 Laravel 动态迁移
【发布时间】:2019-09-12 23:08:12
【问题描述】:

我正在为每个有记录的用户创建一个数据库。我可以通过配置设置这个创建的数据库。但是我不能迁移。 我遇到的错误是:

数据库 [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'

【问题讨论】:

  • 数据库名注册了吗?
  • 数据库好像是用mysql创建的
  • 我认为您需要将[5d7acdf5adf6a] 更改为您使用的驱动程序。例如将 [5d7acdf5adf6a] 更改为 mysql
  • 制作的时候给个名字怎么样?
  • 我想要的是为每个实际注册的用户建立一个数据库,并在登录后访问他们的数据库。为此,我在用户注册时创建了一个唯一 ID。我可以在配置中更改数据库名称,但是在迁移时遇到了这个问题。

标签: database laravel config migrate


【解决方案1】:

解决办法

 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***

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2015-07-17
    • 2020-04-18
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2016-10-23
    • 2018-08-01
    • 2020-08-20
    相关资源
    最近更新 更多