我需要你的帮助来在 Laravel 中构建一个查询,无论是 eloquent 还是 DB 查询都可以。
我的表名称是 Users
要查看数据库结构,请打开以下链接:
https://jsfiddle.net/vardaam/mvqzpb2j/
每个用户行都有 2 列referral_code 和 referred_by_code,这意味着每个用户都可以推荐某人并获得奖金,同样,同一用户也可以被某人推荐。
我想返回页面上的信息,其中包含用户详细信息中的循环以及将他推荐给此信息的用户的用户名。为了跟踪相同的情况,我在同一个表中创建了这两列,即:referral_code 和refered_by_code。
我不知道如何在 1 个查询中编写此内容,也不知道如何组合 2 个查询并获得所需的结果。
我的 Controller 代码如下所示:
$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 变量为我提供了用户数据循环,但我不知道如何将这些引用者的用户名附加到该对象。
我已尽力描述,如果我说的话没有意义,请询问,我们很乐意提供进一步的说明。
最佳
最佳答案
您可以将以下关系添加到您的User
模型中:
public function referredBy()
{
return $this->belongsTo(User::class, 'referred_code', 'referral_code');
}
在你的 Controller 中你可以使用:
$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
关于php - 使用 eloquent 或 DB 在 Laravel 中构建数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47905327/