2017-12-20 18 views
2

Laravelでクエリを作成するには、雄弁にもDBクエリにも助けが必要です。Laravelのデータベースクエリを雄弁またはDBで作成する

私のテーブル名は、以下のリンクを開いて、DBの構造を確認するには、ユーザー

次のとおりです。すべてのユーザーの行が2列referral_codereferred_by_codeを持って

https://jsfiddle.net/vardaam/mvqzpb2j/

つまり、すべてのユーザーがを参照すると、と同様のボーナスを得るためには、同様のユーザーでもあるのを参照してください。私はユーザーにループしてページの情報を返したい

このに彼を呼ばれていたユーザーのユーザー名と一緒にを詳述します。同じものを追跡するために、同じテーブル、すなわちreferral_codeとreferenced_by_codeで2つの列を作成しました。

1つのクエリでこれを書く方法、または2つのクエリを結合して目的の結果を得る方法がわかりません。

私のコントローラのコードは以下のようになります。

$obj_users = User::get(); 
$codes = []; 
$referrers = []; 

foreach($obj_users as $referred_by_code) 
{ 
    //Following fetches all user's referred_by_code's code 
    $codes[] = $referred_by_code->referred_by_code; 
} 

foreach ($codes as $code) 
{ 
    //Following fetches usernames of the given referred_by_code's codes  
    $referrers[] = User::where('referral_code', $code)->first()->username; 
} 

return view('users.users', compact(['users', 'paginate', 'referrers'])); 

返す$ユーザー変数は私のユーザーデータのループを提供していますが、私は、そのオブジェクトにこれらの参照元のユーザー名を接続する方法がわかりません。

私は自分のレベルを説明するのに最善を尽くしました。私が言ったことを理解していないことを尋ねてください。あなたが使用することができ、あなたのコントローラで

public function referredBy() 
{ 
    return $this->belongsTo(User::class, 'referred_code', 'referral_code'); 
} 

あなたが使用することができ、あなたのビューで
$users = User::with('referredBy')->get(); 

return view('users.users', compact('users')); 

以降あなたはUserモデルに次の関係を追加することができます

ベスト

答えて

3

@foreach ($users as $user) 
    {{ $user->username }} referred by {{ $user->referredBy ? $user->referredBy->username : '-' }} 
@endforeach 
+1

Marcin Nabialekありがとうございました。あなたのソリューションは魅力的なものばかりでなく、コード品質に非常に感銘を受けました。もう一度ありがとう。 –

+1

@ChetanChitte Glad私は助けることができました:) –