Je travaille sur une application multi-base de données multi-locataires où j'ai une DB
principale qui consiste en une table de locataires, puis pour chaque client hébergé créé, un nouveau DB
est créé. J'écris un fichier de départ pour ceci et je le cours 3 fois pour créer 3 locataires et ensuite 3 DB
pour eux.Seeder fonctionne bien la première fois, mais ne fait pas certaines tâches dans les boucles suivantes dans Laravel 5?
Il fonctionne bien la première fois. Un nouveau locataire est créé dans DB
principal. Un nouveau DB
est créé en utilisant le username
du nouveau locataire. Le DB
est également migrated
avec l'appel de commande Artisan
du code. Mais dans les 2 boucles suivantes, les locataires sont créés dans le DB
principal et de nouveaux DB
sont également créés pour eux mais l'appel de commande Artisan
ne migre pas les 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";
}
}
Qu'est-ce que je fais mal ici. Il fonctionne parfaitement la première fois. Et puis les deux dernières fois seuls les DB
sont créés mais ne sont pas migrés. Seul le premier DB
est migré avec succès à partir de cela. Et aucune erreur n'est jetée de l'artisan.
La sortie de ligne de commande est la suivante:
Creating tenant 0
Migrating tenant 0
Creating tenant 1
Migrating tenant 1
Creating tenant 2
Migrating tenant 2
'table de base ou vue non trouvée: 1146 Table 'psiqQVD7.migrations' n'exist' pas que je reçois quand je suis en train de la solution. Une idée de ce qui se passe? La première table est encore correctement configurée. La deuxième table ne le fait pas. Cette erreur apparaît sur l'appel de la commande Artisan. – Rohan
J'ai édité ma réponse et l'ai testée avec mon installation MySQL locale. –
D'accord, cela a fonctionné. Sensationnel. Mais je ne comprends toujours pas comment. En tout cas merci. :) – Rohan