我有一个为公司构建的标准Laravel应用程序。我现在将其制作为SAAS模型,但对最佳设置感到好奇。我肯定知道我希望每个公司都有自己的数据库来提高安全性,更轻松地获取特定客户数据的能力,并且由于这些公司都是竞争公司,因此可能只是一个更好的卖点。

我的问题是如何设置一个DB和子域来指向其特定的DB和应用程序设置,但是我真的不希望有100个子域,对于iOS应用程序,我需要一个单用户身份验证门户。

有没有一种特定的方法来拥有一个容纳所有laravel用户的数据库,并在登录时将其分配给他们的特定数据库?基本上,我只需要一个门户(身份验证位置)。

我知道这是通用的,但不确定在哪里发布或搜索。

设定:

用户数据库(标准laravel设置)

User | Password Reset | Migrations | Roles


公司数据库

accounts | routes


公司数据库

accounts | routes

最佳答案

您的应用程序有一个默认数据库。那是用户认证的地方。每个公司然后将其数据库详细信息存储在您的主数据库中。一旦有人进行身份验证,您就可以获取数据库详细信息并将其设置为默认数据库。

public function setDefaultConnection($company)
{
    //update the config
     config(['database.connections.mysql' => [
        'host'     => $company->host,
        'username' => $company->username,
        'password' => $company->password
    ]]);

    //Check the credentials by calling PDO
    try {
        DB::connection()->getPdo();
    } catch (\Exception $e) {
        return redirect()->back()->withErrors(["connection" => "Could not connect to the database.  Please check your input."]);
    }
}


不确定这是最好的方法,但是它至少可以让您即时更改连接详细信息。

另一方面,您可以避免更新现有内容,而实际上可以动态添加新的

config(['database.connections.'.$company->id => [
    'driver'   => 'mysql',
    'host'     => $company->host,
    'username' => $company->username,
    'password' => $company->password
]]);

//Using it
$clients = DB::connection($company->id)->select(...);

关于php - Laravel多数据库,一个数据库存储用户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42822294/

10-11 03:06
查看更多