Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel: Run migrations on another database

In my app every user has its own database that created when user registered. Connection and database data (database name, username, password) are saved in a table in default database.

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();
}

Now I want to run some migrations on new user's database after its creation.

Is it possible?

thanks

like image 601
Pooya Saberian Avatar asked Sep 20 '14 19:09

Pooya Saberian


People also ask

How do I refresh a particular migration in Laravel?

If you tried to run migration#2 without every having run #1 then it would fail. When you run artisan migrate then it will only run migrations that haven't already been applied unless you use migrate:refresh in which case it will reset and re-run all migrations.


3 Answers

If you place database config on the database.php file, this can help you:

php artisan migrate --database=**otherDatabase**
like image 172
Fernando Avatar answered Oct 18 '22 20:10

Fernando


In your app/config/database.php you have to:

<?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'    => '',
        ),
    ),
);

Now that you prepared two database connections in your migration you can do:

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

This should work. More infos on: http://fideloper.com/laravel-multiple-database-connections

like image 42
pietrovismara Avatar answered Oct 18 '22 19:10

pietrovismara


If you mean using different database connection, it exists in the docs:

Schema::connection('foo')->create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
});
like image 12
A.Soliman Avatar answered Oct 18 '22 20:10

A.Soliman