2014-09-20 3 views
4

В моем приложении каждый пользователь имеет свою собственную базу данных, созданную при регистрации пользователя. Данные подключения и базы данных (имя базы данных, имя пользователя, пароль) сохраняются в таблице в базе данных по умолчанию.Laravel: Запуск миграции в другой базе данных

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

Теперь я хочу выполнить некоторые миграции в базе данных нового пользователя после его создания.

Возможно ли это?

благодаря

+2

Добавьте среду laravel для своих баз данных и вызовите инструмент мастеров в этих средах? Почему вы создаете базу данных для каждого из ваших клиентов? Это звучит как обычное решение для приложения Laravel. –

+0

Наше веб-приложение похоже на http://wix.com. каждый пользователь может создавать собственные сайты, и мы хотим, чтобы на каждом веб-сайте была своя отдельная база данных. В этом коде я создал отдельную базу данных для каждого пользователя и сохранил ее данные в базе данных по умолчанию, теперь я хочу запустить некоторые миграции в этой новой базе данных для создания новой схемы базы данных. –

ответ

12

В приложении/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' => '', 
     ), 
    ), 
); 

Теперь, когда вы подготовили два соединения с базой данных в вашей миграции вы можете сделать:

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

Это должно сработать. Больше информации на: http://fideloper.com/laravel-multiple-database-connections

+0

У меня нет дополнительного подключения к базе данных в моем файле конфигурации. сведения о соединениях с базой данных сохраняются в первичной базе данных! –

+1

Я думаю, что вы должны уточнить свой вопрос и, возможно, показать код, чтобы сделать его понятным ... – pietrovismara

+0

Введенные коды. спасибо –

2

Если вы размещаете конфигурацию базы данных на файл database.php, это может помочь вам:

php artisan migrate --database=**otherDatabase** 
0

Я думаю, что я наконец-то понял, этот беспорядок ... Это решение не нуждается в конфигурации для каждой базы данных арендатора и должна запускаться только один раз.

class MigrationBlah extends Migration { 
    public function up() { 
    $dbs = DB::connection('tenants')->table('tenants')->get(); 
    foreach ($dbs as $db) { 
     Schema::table($db->database . '.bodegausuarios', function($table){ 
     $table->foreign('usuario')->references('usuarioid')->on('authusuarios'); 
     }); 
    } 
    } 
} 

Где у меня есть связь с именем «жильцов» на моем database.php, который содержит имя базы данных всех своих жильцов. У меня установлено соединение по умолчанию с моей базой для арендаторов. Эта база данных отвечает за обработку таблицы миграции.

С помощью инструкции foreach она проходит через базы данных арендаторов и запускает миграцию на каждом из них.

При подключении по умолчанию вы должны настроить пользователя, который имеет доступ ко всем базам арендатора, чтобы он работал.

+0

Используя этот подход, вы не можете выполнить миграцию для одного арендатора. –

Смежные вопросы