Laravel拥有多个数据库

时间:2018-05-25 06:56:15

标签: laravel laravel-passport

我有用于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;    
     }
}

4 个答案:

答案 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