Laravel с несколькими базами данных - PullRequest
0 голосов
/ 25 мая 2018

У меня есть проект laravel, используемый для apis (Паспорт).Он использует несколько баз данных, одна база данных хранит информацию о пользователе и имя базы данных для этого пользователя.Я создал 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 голосов
/ 25 мая 2018

Сначала вы должны установить соединение в 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');
0 голосов
/ 25 мая 2018

Сначала вы должны позвонить

$user = Auth::user();

, который возвращает вам текущую ассоциированную модель пользователя, которая обычно является пользователем.Тогда должно работать следующее:

$user->id
0 голосов
/ 25 мая 2018

После 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);
        });

    }

}

попробуйте этот код и скажите мне, работает ли он

0 голосов
/ 25 мая 2018

Вы не можете использовать Auth в конструкторе, поскольку промежуточное ПО еще не запущено.его от 5.3

проверьте эту ссылку: https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

...