使用 eloquent 或 DB 在 Laravel 中构建数据库查询

Build database query in Laravel with eloquent or DB

我需要你的帮助来在 Laravel 中构建查询 eloquent 或数据库查询也可以。

我的 table 名字是 Users

要查看DB结构,打开下面link:

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

每个用户行有 2 列 referral_codereferred_by_code 这意味着每个用户都可以 推荐某人并获得类似的奖金同样的用户也被某人推荐

我想要return 用户详细信息中带有循环的页面上的信息,以及向他介绍此内容的用户的用户名。为了跟踪相同的内容,我在相同的 table 中创建了这两列,即:referral_code 和 referred_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']));

returning $users 变量为我提供了用户数据循环,但我不知道如何将这些推荐人的用户名附加到该对象。

我已经尽力描述了,如果我说的不对请追问,我们很乐意提供进一步的解释。

最佳

您可以将以下关系添加到您的 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