2017-05-06 19 views
1

私はこれが私に私のデータベースからすべてユーザーのリストを与えているLaravelの認証ユーザー

$user = Auth:user()->get(); 
dd($user); 

をやっています。 なぜですか?

+0

' - > get();' – Onix

答えて

0

はただ、この場合には

$user = Auth:user(); 
dd($user); 

単一のユーザー・データを取得するためにのget()メソッドの戻り値のユーザーコレクションオブジェクト

のget()を削除しますので
0

次の方法でユーザーデータを認証できます。

$user = Auth::user(); instead of using get(); 

Your user id is: {{ $user->id }} 
    Your first name is: {{ $user->first_name }} 
    Your last name is: {{ $user->last_name }} 
+0

あなたの質問は答えを解決しますが、これがなぜそうであるかについての説明もしていませんが(質問で特に質問された) – milo526

2

その他の回答は、問題の解決方法を説明していますが、これがどうして起こるのかを正しく説明できません。

laravelドキュメント状態(source):

get方法は、各結果はPHP StdClassオブジェクトのインスタンスである結果を含むIlluminate\Support\Collectionを返します。

完全なドキュメントはhereで、APIリファレンスはhereです。

ここではget関数はコレクションを返しますが、Userオブジェクトは返しません。 QueryBuilderのgetメソッドは、select文を実行します。

次のスニペットでは、実行されるクエリを確認できます。

DB::enableQueryLog(); 
Auth::user()->get(); 
dump(DB::getQueryLog()); 

この意志出力:Only get output

DB::enableQueryLog(); 
Auth::user()->where('id', 1)->get(); 
dump(DB::getQueryLog()); 

この意志出力:Get with where output

最初のクエリが実際に出力予期されたユーザを、2番目のクエリはAuth::user()からユーザクラスをつかむであろうし、その表からすべての行を選択します。

3番目と4番目のクエリを実行すると、最初に予想されるユーザーを取得することがわかりますが、4番目のクエリはユーザー(この場合はID 1のユーザー)も取得します。これはあまりにもwhereであり、Auth::user()ではありません。

これらの結果から、getにはすべてのクエリビルダー関数は考慮されますが、指定されたクラスのパラメータは考慮されないと結論づけられます。 オブジェクトを取得する場合、そのオブジェクトのクラスだけが考慮されます。

としてあまりにも他の質問どこ正しいあなたの問題を解決し、あなたが使用することができます。

$user = Auth::user(); 

をユーザーをフェッチするには。