Laravel 有多个数据库
Laravel with multiple database
我有 laravel 用于 api(Passport) 的项目。它使用多个数据库,一个数据库存储用户信息和该用户的数据库名称。我创建了一个 BaseController
,所有其他控制器都从这个控制器扩展。但是我无法从 BaseController
中获取 Auth::id();
。如何在构造函数中获取 Auth::id
?
class BaseController extends Controller
{
protected $companySchema;
public function __construct() {
$user = \App\User::where('user_id', Auth::id())->first();
$company = $user->company;
$this->companySchema = $company->cmp_Schema;
}
}
您不能在构造函数中使用 Auth
,因为中间件还不是 运行。它来自 5.3
检查这个 link : https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors
你应该先打电话给
$user = Auth::user();
返回当前关联的用户模型,通常是 User。那么以下应该有效:
$user->id
在 laravel 5.3.4 之后,您不能在构造函数中使用 Auth::user()
,因为中间件还不是 运行。
class BaseController extends Controller {
public function __construct() {
$this->middleware(function ($request, $next) {
$this->companySchema = Auth::user()->company->cmp_Schema;
return $next($request);
});
}
}
试试这个代码,告诉我它是否有效
首先你应该在 config/database.php
:
中设置一个连接
'my_new_connection' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => $your_db_name,
'username' => $your_db_username,
'password' => $your_db_password,
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
然后你可以通过这个动态改变默认的数据库连接:
Config::set('database.default', 'my_new_connection');
我有 laravel 用于 api(Passport) 的项目。它使用多个数据库,一个数据库存储用户信息和该用户的数据库名称。我创建了一个 BaseController
,所有其他控制器都从这个控制器扩展。但是我无法从 BaseController
中获取 Auth::id();
。如何在构造函数中获取 Auth::id
?
class BaseController extends Controller
{
protected $companySchema;
public function __construct() {
$user = \App\User::where('user_id', Auth::id())->first();
$company = $user->company;
$this->companySchema = $company->cmp_Schema;
}
}
您不能在构造函数中使用 Auth
,因为中间件还不是 运行。它来自 5.3
检查这个 link : https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors
你应该先打电话给
$user = Auth::user();
返回当前关联的用户模型,通常是 User。那么以下应该有效:
$user->id
在 laravel 5.3.4 之后,您不能在构造函数中使用 Auth::user()
,因为中间件还不是 运行。
class BaseController extends Controller {
public function __construct() {
$this->middleware(function ($request, $next) {
$this->companySchema = Auth::user()->company->cmp_Schema;
return $next($request);
});
}
}
试试这个代码,告诉我它是否有效
首先你应该在 config/database.php
:
'my_new_connection' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => $your_db_name,
'username' => $your_db_username,
'password' => $your_db_password,
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
然后你可以通过这个动态改变默认的数据库连接:
Config::set('database.default', 'my_new_connection');