2017-12-20 14 views
2

Laravel에서 쿼리를 작성하려면 귀하의 도움이 필요합니다.Laravel의 데이터베이스 쿼리를 웅변이나 DB로 작성하십시오.

내 테이블 이름은 사용자

열고, 다음 링크를 DB 구조를 참조하는 것입니다

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

모든 사용자 행 2 열 referral_codereferred_by_code을 가지고 이는 모든 사용자가 을 참조 할 수 있음을 의미합니다. 및 마찬가지로 보너스를 얻으려면 동일한 사용자가 이고 어떤 사람은입니다.

내가 사용자에 루프 페이지의 정보를 반환하려는

그를 언급 한 사용자의 사용자 이름과 함께을 자세히 설명합니다. 같은 것을 추적하기 위해 동일한 테이블, 즉 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'])); 

복귀하는 $ 사용자 변수 나에게 사용자 데이터의 루프를 제공하지만 해당 개체에 그 참조 페이지의 사용자 이름을 부착하는 방법을 모르겠어요.

나는 설명하기에 최상을 시도했지만, 내가 말한 것을 부탁하지 말고 더 명확하게 설명해 드리겠습니다.

최저

답변

3
당신은 당신의 User 모델에 다음 관계를 추가 할 수 있습니다

: 당신이 사용할 수있는 컨트롤러에서

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

:

$users = User::with('referredBy')->get(); 

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

과 나중에보기에서 사용할 수 :

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

대단히 감사합니다. Marcin Nabialek, 당신의 솔루션은 매력처럼 작동했을뿐만 아니라 코드 품질에 깊은 인상을 받았습니다. 다시 한번 감사합니다. –

+1

@ChetanChitte Glad 내가 도울 수있었습니다 :) –