【发布时间】:2022-10-02 14:27:53
【问题描述】:
我正在学习如何开发 laravel 多租户、多数据库和多域 Web 应用程序。所以我正在使用tenancyforlaravel (archtechx/tenancy) 包(我第一次使用它)。所以我的问题是如何在创建新数据库并为其插入数据后连接它。波纹管代码对我有用。但我觉得应该有办法使用这个包来做到这一点,另一个问题是我们可以在两个数据库(如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\',
];
-
你是按照官方文档来的吗?很难判断出了什么问题,但我很确定您的配置不正确......
-
是的先生,我正在关注文档,但我无法弄清楚那部分。这就是为什么我最后想我应该从这里问。如果您可以参考学习,我真的很感激。谢谢
标签: laravel multi-tenant multi-database