Vic*_*rez 26 php laravel laravel-4
目前我有一个应用程序,托管用CodeIgniter编写的多个租户.但我真的很喜欢Laravel 4,我想开始将应用程序迁移到Laravel.
这是当前的设置:
在Codeigniter中,启动和结束新的数据库连接相对容易.
在Laravel我有以下问题/问题.
这些是我的主要问题,我有一些其他的小东西,但这些可以解决.
希望有人可以解释一下......
Ble*_*ing 23
我只是对此进行了尝试,因此请注意:) DatabaseManager类,无论何时调用DB,都使用和扩展方法.这是源的链接.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);
});
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会为每个用户添加一个新方法,User :: databaseConnection(),并在我扩展DatabaseManager时调用它.
DB::extend($user->username, function() use ($user) {
return $user->databaseConnection();
});
Run Code Online (Sandbox Code Playgroud)
通过您的应用程序,您应该能够通过以下方式呼叫注册用户的连接:
DB::connection(Auth::user()->username);
Run Code Online (Sandbox Code Playgroud)
更新
根据您调用租户连接的频率和时间,您可能希望使用IOC容器.
App::bind('tenantDB', function()
{
return DB::connection(Auth::user()->username);
});
App::make('tenantDB')->insert(...);
Run Code Online (Sandbox Code Playgroud)
我忘记了迁移和播种.对于迁移,您可以设置文件路径
php artisan migrate:make foo --path=app/migrations
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用Config类设置默认数据库或DB :: setDefaultConnection($ username),我将假设将为当前连接完成所有迁移和种子设定.当该过程完成后,您可以切换回主数据库.
更新2
laravel的开发人员很惊人,我应该肯定有这样的冲动,要早点检查出来.您可以在已创建的任何数据库连接上进行迁移和种子设定.
artisan migrate --database='userConnectionName'
artisan db:seed --database='userConnectionName'
Run Code Online (Sandbox Code Playgroud)
看看Barry的答案,这可能比扩展DatabaseManager更简单.
如果要查看这些命令的所有选项,只需运行:
artisan help migrate
artisan help db:seed
Run Code Online (Sandbox Code Playgroud)
您可以使用租户数据库凭据创建1个数据库,并在您的应用中动态设置它们:
$tenant = Tenant::where('username', '=', $username)->first();
Config::set('database.connections.tenant.username', $tenant->db_username);
Config::set('database.connections.tenant.password', $tenant->db_password);
Config::set('database.connections.tenant.database', $tenant->db_database);
Run Code Online (Sandbox Code Playgroud)
这将需要在database.php文件中创建2个连接.(例如app和tenant)并在模型中指定要使用的数据库(1用于存储租户,1用于租户特定数据库)
并且可能创建一个路径/脚本来创建/更新表.不确定有多个数据库的迁移.