Seeder第一次运行正常,但在Laravel 5的后续循环中没有执行某些任务?

时间:2015-10-07 09:51:14

标签: php loops laravel laravel-5

我正在开发一个多租户多数据库应用程序,其中我有一个主要DB,其中包含一个租户表,然后为每个创建的租户创建一个新的DB。我正在为此编写一个种子文件,我正在运行它3次,为他们创建3个租户和随后的3个DB

第一次运行正常。在主DB中创建新租户。使用新租户的DB创建新的usernameDB也是migrated,代码中有Artisan命令调用。但是在接下来的2个循环中,租户是在主DB中创建的,新的DB也是为它们创建的,但Artisan命令调用不会迁移{ {1}}' S

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

1 个答案:

答案 0 :(得分:2)

Laravel中的数据库连接保持活动状态,这意味着当您通过config更改数据库名称时,它不会切换到新数据库。您需要强制DB::connection($connection)->reconnect()重新连接后台连接。

运行迁移时,由于Laravel使用数据库名称和表名来检查{​​{1}}表是否存在,因此您还需要更新当前连接的表名。

在你的情况下:

migrations