我需要你的帮助来在Laravel中构建一个查询,无论是雄辩还是数据库查询都可以。
我的表名是Users
要查看数据库结构,请打开以下链接:
https://jsfiddle.net/vardaam/mvqzpb2j/
每个用户行都有2列referral_code和referenced_by_code,这意味着每个用户都可以引用某人并获得奖金,类似同一个用户也被某个用户推荐。
我想在页面上返回信息,其中包含用户详细信息中的循环以及已将其引用给他的用户的用户名。为了跟踪相同的情况,我在同一个表中创建了这两个列,即:referral_code和referenced_by_code。
我不知道如何在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']));
返回的$ users变量为我提供了用户数据循环,但我不知道如何将这些referrer的用户名附加到该对象。
我试着用我最好的水平来形容,请问我说的没有意义,很乐意提供进一步的说明。
最好
您可以在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