bugfix> laravel > 投稿

apis(パスポート)に使用するlaravelプロジェクトがあります。 1つのデータベースがユーザー情報とそのユーザーのデータベース名を格納する複数のデータベースを使用します。私は 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 件
  • 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);
            });
        }
    }
    
    

    このコードを試して、それが機能するかどうか教えてください

  • Auth は使用できません  ミドルウェアはまだ実行されていないため、コンストラクターで。 5.3から

    このリンクを確認してください:https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

  • まず、 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');
    
    

  • 最初に電話する必要があります

    $user = Auth::user();
    
    

    関連付けられている現在のユーザーモデル(通常はユーザー)が返されます。その後、次のように動作するはずです:

    $user->id
    
    

あなたの答え