[英]How do I run migration on multiple databases in Laravel?
我有许多带有前缀的数据库。 这些都具有相同的数据库结构。
例如:
而且这些还在不断增加。
我想通过前缀在所有数据库上运行迁移。 我如何在 Laravel 中做到这一点?
我找到了我认为的解决方案。 您可以根据需要在config\\database.php
创建任意数量的数据库连接。 之后,您可以像这样编写迁移:
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
就我而言,我有一个主数据库,我在其中存储所有其他数据库(子数据库)的所有信息连接。
为了在每个子数据库上运行迁移,我将代码放在下面。
请注意:我在 Laravel 中创建了 2 个连接。 我在运行时动态更改的默认一个和第二个取决于执行请求的客户端。 我认为在数据库中为每个客户端手动创建连接效率不高:我可能有 100 个客户端,所以猜猜那里的代码如何! 而且,通过这种方式,您还需要为每个客户创建特定的模型。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Models\Enseigne;
class CreateUserTable extends Migration
{
private $Enseigne;
private $dbClients;
public function __construct()
{
//Here i'm loading my model and i'm geting all list of child connection from my main database
$this->Enseigne = new Enseigne();
$this->dbClients = $this->Enseigne->getAll();
}
private function switchDb($infosDb)
{
config(['database.connections.client.host' => $infosDb->dbhost]);
config(['database.connections.client.port' => $infosDb->dbport]);
config(['database.connections.client.database' => $infosDb->dbname]);
config(['database.connections.client.username' => $infosDb->dbuser]);
config(['database.connections.client.password' => $infosDb->dbpass]);
}
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Looping through mylist of connection
foreach ($this->dbClients as $infosDb) {
// Switching my connexion on my client connexion here
$this->switchDb($infosDb);
Schema::connection('client')->create('users', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
// Note that purge, it's very important to clean the connection cache
// Otherwise you'll migrate on the same DB even if you iterate it
DB::purge('client');
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('client')->dropIfExists('users');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.