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');