我有用于apis(Passport)的laravel项目。它使用多个数据库,一个数据库存储用户信息和该用户的数据库名称。我创建了一个BaseController
,所有其他控制器都从这个控制器扩展。但我无法从Auth::id();
获取BaseController
。如何在构造函数中获取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;
}
}
答案 0 :(得分:1)
您不能在构造函数中使用Auth
,因为中间件尚未运行。它来自5.3
点击此链接:https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors
答案 1 :(得分:1)
在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);
});
}
}
尝试此代码并告诉我它是否有效
答案 2 :(得分:0)
首先,您应该在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');
答案 3 :(得分:-1)
你应该先打电话
$user = Auth::user();
返回当前与之关联的用户模型,通常是User。然后应该工作:
$user->id