Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel多数据库,一个数据库存储用户_Php_Mysql_Laravel - Fatal编程技术网

Php Laravel多数据库,一个数据库存储用户

Php Laravel多数据库,一个数据库存储用户,php,mysql,laravel,Php,Mysql,Laravel,我为一家公司开发了一个标准的Laravel应用程序。我现在正在将其制作成一个SAAS模型,但我想知道最好的设置。我确信我希望每家公司都有自己的数据库,以确保安全性,更容易获得特定的客户数据,因为这些公司都是竞争对手,所以这可能是一个更好的卖点 我的问题是如何设置DBs和子域的but,以指向其特定的DB和应用程序设置,但我并不真正想要100个子域,对于iOS应用程序,我需要一个单用户身份验证门户 是否有一种特定的方法可以让数据库容纳所有的laravel用户,并在登录时提供给他们特定的数据库?基本上

我为一家公司开发了一个标准的Laravel应用程序。我现在正在将其制作成一个SAAS模型,但我想知道最好的设置。我确信我希望每家公司都有自己的数据库,以确保安全性,更容易获得特定的客户数据,因为这些公司都是竞争对手,所以这可能是一个更好的卖点

我的问题是如何设置DBs和子域的but,以指向其特定的DB和应用程序设置,但我并不真正想要100个子域,对于iOS应用程序,我需要一个单用户身份验证门户

是否有一种特定的方法可以让数据库容纳所有的laravel用户,并在登录时提供给他们特定的数据库?基本上我只需要一个门户(auth位置)

我知道这是一般性的,但不知道该在哪里发布或搜索什么

设置:

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

a公司db

accounts | routes
b公司db

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(...);

对一个数据库存储用户的多数据库使用联接表方法

了解有关laravel联接表的更多信息

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

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