[英]Getting Auth User ID in Laravel
如果用戶登錄Laravel 5.1,我們可以訪問用戶ID
Auth::user()->id
在我之前的應用程序(不是laravel)中,當用戶登錄時,我正在為userid注冊會話。 我正在檢查$ _SESSION ['user_id']是否可用。
我想問一下,當我調用Auth::user()->id
是否為每個請求生成和sql查詢? 如果它確實對表現不利。
我應該注冊一個新的會話嗎?
Session::put('user_id', Auth::user()->id);
為了表現。
或Auth:user() - > id是最佳選擇?
您可以使用Auth::id()
代替。 這會從會話中抓取它。 如果會話中不存在,則它將運行查詢並從數據庫中獲取它。
這不是一個真正的答案,但它打算顯示Auth::id()
如何工作。 將以下路由添加到web.php
:
Route::get('/fake', function () {
\DB::enableQueryLog();
Auth::id();
dump(\DB::getQueryLog());
});
現在,導航到/fake
,這會產生如下結果:
array:1 [▼
0 => array:3 [▼
"query" => "select * from `users` where `id` = ? limit 1"
"bindings" => array:1 [▼
0 => 284
]
"time" => 15.37
]
]
我一遍又一遍地嘗試了這一點,似乎Auth::id()
總是查詢數據庫,而不是以某種方式在會話中緩存結果(我使用的是Laravel 5.6,PHP 7.2.3和MariaDB 10.2.14) )。
為了確認,我還啟用了MariaDB日志記錄功能 ,我得到了:
180611 12:08:10 77 Connect user@localhost as anonymous on dbname
77 Query use `dbname`
77 Prepare set names 'utf8mb4' collate 'utf8mb4_unicode_ci'
77 Execute set names 'utf8mb4' collate 'utf8mb4_unicode_ci'
77 Close stmt
77 Prepare set time_zone="+04:30"
77 Execute set time_zone="+04:30"
77 Close stmt
77 Prepare set session sql_mode='NO_ENGINE_SUBSTITUTION'
77 Execute set session sql_mode='NO_ENGINE_SUBSTITUTION'
77 Close stmt
77 Prepare select * from `users` where `id` = ? limit 1
77 Execute select * from `users` where `id` = 284 limit 1
77 Close stmt
77 Quit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.