Laravel:在另一个数据库上运行迁移

Poo*_*ian 15 database-migration multi-tenant laravel laravel-4

在我的应用程序中,每个用户都有自己的数据库,用户注册后创建.连接和数据库数据(数据库名称,用户名,密码)保存在默认数据库的表中.

try{
    DB::transaction(function() {

        $website = new Website();
        $website->user_id = Auth::get()->id;
        $website->save();

        $database_name = 'website_'.$website->id;

        DB::statement(DB::raw('CREATE DATABASE ' . $database_name));

        $websiteDatabase = new WebsiteDatabase();
        $websiteDatabase->website_id = $website->id;
        $websiteDatabase->database_name = $database_name;
        $websiteDatabase->save();

    });
} catch(\Exception $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

现在我想在新用户的数据库创建后运行一些迁移.

可能吗?

谢谢

pie*_*ara 32

在你的app/config/database.php中你必须:

<?php
return array(

    'default' => 'mysql',

    'connections' => array(

        # Our primary database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Our secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

现在您已在迁移中准备了两个数据库连接,您可以:

Schema::connection('mysql2')->create('some_table', function($table)
{
    $table->increments('id');
});
Run Code Online (Sandbox Code Playgroud)

这应该工作.更多信息:http://fideloper.com/laravel-multiple-database-connections

  • 我认为您应该澄清您的问题,并可能显示一些代码以使其易于理解...... (2认同)

小智 26

如果您将数据库配置放在该database.php文件上,这可以帮助您:

php artisan migrate --database=**otherDatabase**
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您的意思是使用不同的数据库连接,它存在于文档中:

Schema::connection('foo')->create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
});
Run Code Online (Sandbox Code Playgroud)


Muh*_*kur 6

Config::set我有同样的问题,我的解决方案是先使用然后运行更改数据库Artisan::call("migrate")。所以根据你的代码:

DB::statement(DB::raw('CREATE DATABASE ' . $database_name));
Config::set('database.connections.mysql.database', $database_name);
Artisan::call("migrate --database=mysql");
Run Code Online (Sandbox Code Playgroud)

配置仅在您的会话中更改,然后稍后重置为当前设置。