Сеятель работает отлично в первый раз, но не выполняет некоторые задачи в последующих циклах в Laravel 5?

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

Он работает отлично в первый раз. В основной DB создается новый арендатор. Новая DB создается с использованием имени username нового арендатора. DB также migrated с помощью вызова команды Artisan из кода. Но в следующих двух циклах арендаторы создаются в основной DB и для них создаются новые DB но командный вызов Artisan не переносит данные DB .

 public function run() { $faker = Faker::create(); // Fetching all tenants $tenants = App\Tenant::all(); // Deleting their databases $tenants->each(function($tenant){ DB::statement('DROP DATABASE IF EXISTS ' . $tenant->username); }); // Truncating the tenants table itself DB::table('tenant')->truncate(); for($i = 0; $i < 3; $i++){ $company = $faker->company(); $description = $faker->text(); $logo = $faker->imageUrl(50, 50); $username = str_random(8); \Config::set('database.default', 'archive'); echo 'Creating tenant ' . $i . "\r\n"; Tenant::create([ 'name' => $company, 'description' => $description, 'logo' => $logo, 'username' => $username, ]); DB::statement('CREATE DATABASE ' . $username); \Config::set('database.connections.tenant.database', $username); \Config::set('database.default', 'tenant'); echo 'Migrating tenant ' . $i . "\r\n"; \Artisan::call('migrate', [ '--path' => 'database/migrations/tenants' ]); echo "\r\n"; } } 

Что я делаю неправильно здесь. Он работает отлично в первый раз. И тогда последние два раза создаются только DB , но не переносятся. Из этого успешно успешно переносится только первая DB . И никакая ошибка не бросается от ремесленника.

Выход командной строки выглядит следующим образом:

 Creating tenant 0 Migrating tenant 0 Creating tenant 1 Migrating tenant 1 Creating tenant 2 Migrating tenant 2 

Соединение с базой данных поддерживается в Laravel, что означает, что при изменении имени базы данных через config она не переключается на новую базу данных. Вам необходимо принудительно подключить фоновое соединение через DB::connection($connection)->reconnect() .

При выполнении миграции, поскольку Laravel использует имя базы данных и имя таблицы для проверки наличия таблицы migrations , вам также необходимо обновить имя таблицы для текущего соединения.

В твоем случае:

 # ... \Config::set('database.connections.tenant.database', $username); \Config::set('database.default', 'tenant'); \DB::reconnect(); \DB::setDatabaseName($username); # ...