gpt4 book ai didi

php - Laravel 4 : Multiple Tenant Application, 每个租户都有自己的数据库和一个全局数据库

转载 作者:IT王子 更新时间:2023-10-29 01:22:11 25 4
gpt4 key购买 nike

目前我有一个托管多个租户的应用程序,这些租户是用 CodeIgniter 编写的。但我真的很喜欢 Laravel 4,我想开始将应用程序迁移到 Laravel。

这是当前的设置:

  • 每个租户都有自己的数据库。
  • 只有一组应用程序文件。
  • 当我们创建一个新租户时,会创建一个新数据库并运行一个安装脚本,并为数据库植入一些初始信息。
  • 每个租户也有自己的子域。这就是我们可以检测使用哪个数据库的方法。
  • 有一个主数据库,其中包含租户信息和用户以及其他一些通用表。
  • 当需要更新架构时,我们只需创建一个将为每个租户运行的更新脚本。这是通过 Codeigniter 的特殊编码 CLI 脚本实现的

在 Codeigniter 中,启动和结束新的数据库连接相对容易。

对于 Laravel,我有以下问题/疑问。

  • 您将如何即时启动/结束数据库连接?
  • 我想使用迁移,但我想为每个租户运行它们。迁移目前仅在“主”数据库连接上运行。而且它只运行一次。
  • 播种也是如此..

这些是我的主要问题,我还有一些其他小问题,但可以解决。

希望有人能解释一下..

最佳答案

我只是尝试一下,所以请注意 :)每当您调用 DB 时都会使用的 DatabaseManager 类具有和扩展方法。这是 link to the source . DB::connection() 方法应该返回一个 Illuminate\Database\Connection 的实例。 .根据所有这些,我将创建一个新的用户连接,如下所示:

$user = Auth::user();
DB::extend($user->username, function() use ($user) {
// $pdo = new PDO(); set this up how you see fit
return new Illuminate\Database\Connection($pdo, $user->databaseName, $tablePrefix);
});

就个人而言,我会为每个用户添加一个新方法 User::databaseConnection(),并在我扩展 DatabaseManager 时调用它。

DB::extend($user->username, function() use ($user) {
return $user->databaseConnection();
});

在整个应用程序中,您应该能够通过以下方式调用注册用户的连接:

DB::connection(Auth::user()->username);

更新

根据调用租户连接的频率和时间,您可能需要使用 IOC 容器。

App::bind('tenantDB', function()
{
return DB::connection(Auth::user()->username);
});

App::make('tenantDB')->insert(...);

我忘记了迁移和播种。对于迁移,您可以设置文件路径

php artisan migrate:make foo --path=app/migrations

因此,如果您使用 Config 类来设置默认数据库或 DB::setDefaultConnection($username),我假设所有迁移和播种都将为当前连接完成。当该过程完成后,您可以切换回主数据库。

更新 2

laravel 开发人员非常棒,我绝对应该早点检查它。您可以在您创建的任何数据库连接上进行迁移和播种。

artisan migrate --database='userConnectionName' 
artisan db:seed --database='userConnectionName'

看看 Barry 的回答,这可能比扩展 DatabaseManager 简单得多。

如果您想查看这些命令的所有选项,只需运行:

artisan help migrate
artisan help db:seed

关于php - Laravel 4 : Multiple Tenant Application, 每个租户都有自己的数据库和一个全局数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com