我将在后端使用动态数据库连接。
// ReadFile function variables
static const DWORD bufferSize = 50;
WCHAR buffer[bufferSize+1]; // Leave room for null.
DWORD bytesWritten = 0;
//-----------------------------------------------------------------
// Reading data from file
if (!ReadFile(
hSourceFile,
buffer,
bufferSize*sizeof(WCHAR),
&bytesWritten,
NULL))
{
wprintf(L"Error code: %u\n", GetLastError());
return 1;
}
buffer[bytesWritten/sizeof(WCHAR)] = 0; // Null terminate.
wprintf(L"%s. \n", buffer); // Look ma! No cast needed.
如您所见,我必须在每次请求时更改db config以使用动态数据库连接。 如果存在具有不同数据库连接的并发请求,那么我该如何处理这些请求和连接?
请帮帮我。
答案 0 :(得分:0)
documentation适用于很多情况,但是,我发现在很多情况下在中间件中设置连接会更方便。这更适合多租户类型的应用,但它可能对您有用:
public function handle($request, Closure $next)
{
// if a user belongs to an organization, company, team, etc.
// and each having their own database with a DSN stored in the database.
if (auth()->check() && auth()->user()->company->active) {
$uuid = $request->user()->company->db_uuid;
$host = $request->user()->company->db_host;
// here you can merge additional connection info in, such
// as a master password from .env, for example
$password = config('database.customer.master');
// then set the default connection or assign a new one
config(['database.connections.customer' => [
'host' => $host,
'password' => $password,
'database' => $uuid,
'username' => 'customer_master'
]]);
return $next($request);
}
abort(403, 'Unauthorized');
}
请求生命周期中的每个查询都将使用该连接,而无需每次都设置连接。
大多数模型都是针对客户需求的,所以我们在基本模型中设置数据库连接,并在需要的地方继承。
class BaseModel extends Model
{
public function __construct($attributes = []) {
parent::__construct($attributes);
$this->connection = config('database.connections.customer');
}
}
答案 1 :(得分:0)
除非通过文件本身或.env。
进行更改,否则应用程序的配置是静态的如果您希望按用户分隔数据库,则可以在会话中存储连接名称。
一个例子:
$users = DB::connection(session('databaseName'))->select(...);
在登录操作中,您应设置会话:session(['databaseName' => 'secondDatabase']);
确保您的database.php
中有一个名为'secondDatabase'的连接。