我正在学习如何开发一个laravel多租户、多数据库和多域的web应用程序。所以我使用tenancyforlaravel(建筑技术/租赁)包(我第一次使用它)。所以我的问题是如何连接新的数据库后,创建它和插入数据。贝娄代码为我工作。但我觉得应该有一种方法来做这件事使用这个包,另一个问题是我们能不能在两个数据库之间建立关系,比如landload和其他数据库?
在配置/数据库中,
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mysql2' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => null,
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
在MyController文件中,
public function insertShop()
{
$this->validate();
$record = Tenant::updateOrCreate(['id' => $this->recordId], [
'plan' => 'free',
'user_id' => Auth::user()->id,
]);
$record->domains()->updateOrCreate(['id' => $this->recordId], [
'domain' => $this->domain
]);
Config::set('database.connections.mysql2.username', $record->tenancy_db_username);
Config::set('database.connections.mysql2.password', $record->tenancy_db_password);
Config::set('database.connections.mysql2.database', $record->tenancy_db_name);
DB::purge('mysql2');
DB::reconnect('mysql2');
ShopDetail::updateOrCreate(['id' => $this->recordId], [
'tenant_id' => $record->id,
'account_type' => $this->account_type,
'business_type' => $this->business_type,
'name' => $this->name,
]);
$this->createTeam($record->id);
}
在ShopDetails模型中,
protected $connection = 'mysql2';
protected $fillable = [
'tenant_id',
'account_type',
'business_type',
'name',
];
1条答案
按热度按时间kninwzqo1#
在正确的参考了文档之后,我弄清楚了新建数据库后如何连接,这叫做手动初始化,只需要这样做,
替换以下代码,
对此,
并且需要从ShopDetails模型中删除手动连接,