2017-10-12 5 views
1

私はユーザーがいて、xpを持っています。Laravel:Eloquent Form

User::orderBy('xp', 'desc')->get(); 

しかし、今私は1つのユーザーランクを取得したいと思います。だから私はxpで自分のユーザーリストを注文し、このリストの特定のユーザーの位置を取得したい。

これはforeachなしでも可能ですか?

おかげ

+0

ユーザーテーブルのテーブル構造を表示します。 –

答えて

1

私は、その実際には2つのクエリを考える:

$user = User::find($id) 

$position = User::where('x', '>=', $user->xp)->count(); 

だから、最初はただusersがこのuserよりXP多くを持っているどのように多くの参照するクエリを実行し、問題のユーザーを取得します。

+0

ああ!かなり賢い !そんなことは考えなかった!ありがとう:) –

+0

これは、すべてのユーザーのDBへの追加クエリを作成することに注意してください。 –

+0

@AlexeyMezenin私は1人のユーザーのショーでそれを使用したいので、それはすべてのユーザーのためのクエリを作成しないでしょうか? –

1

コレクションを取得するので、あなたがこれを行うことができます:

$users = User::orderBy('xp', 'desc')->get(); 

$position = $users->where('name', 'John')->keys()->first() + 1; // Get position by name. 
$position = $users->where('id', 5)->keys()->first() + 1; // Get position by user ID. 

このソリューションでは、DBへの追加のクエリを作成しません。

+0

'User :: orderBy( '​​xp'、 'desc') - > get();'はテーブル内のすべてのユーザを取得して水分補給します。 –

+0

@AlexHarrisすべてのOPのニーズが、リクエストごとに1人のユーザーの位置を表示している場合は、ソリューションを使用する必要があります。ロードされたユーザーのための位置を表示したい場合、このソリューションはより良いでしょう。彼は 'get()'クエリを表示してforeachを挙げていたので、たくさんのユーザのポジションを表示したいと思っていました。 –