【问题标题】:I want to return a user with a list of all the people they have referred我想返回一个用户,列出他们推荐的所有人
【发布时间】:2020-07-10 18:11:10
【问题描述】:

我正在我的软件中开发推荐系统。我已经获得了推荐权,但我想列出所有推荐过某人的用户以及他们在管理端推荐的人数。

这是我的用户模型

public function referrals()
{
    return $this->hasMany(Referral::class, 'user_id', 'id');
}

public function referrer()
{
    return $this->hasOne(Referral::class, 'referred_by', 'id');
}

注意:referred_by 是推荐人,user_id 是被推荐人

这是我的推荐模型

protected $fillable = ['user_id', 'referred_by', 'status'];

public function user()
{
    return $this->belongsTo(User::class);
}

这是我的推荐迁移

Schema::create('referrals', function (Blueprint $table) {
            $table->id();
            $table->integer('user_id')->unsigned()->references('id')->on('users');
            $table->integer('referred_by')->unsigned()->references('id')->on('users');
            $table->string('status')->nullable();
            $table->timestamps();
        });

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以使用has('relationshipName'),它会根据您的案例中是否存在关系推荐一些用户来限制您的结果。

    withCount('relationshipName'),它将计算关系中的结果数,而不实际加载它们。

    User::has('referrals')->withCount('referrals')->get()
    

    【讨论】:

    • 谢谢,伙计,这很有帮助,但在实施后我遇到了另一个问题,即在推荐表上,根据我设置的相同条件,状态列可以是活动的或空的,现在,在获得用户的所有总推荐计数后,我希望能够获得设置为活动的剂量计数和未设置的剂量计数
    • 您可以向加载的withCount() 添加条件,如下所示::withCount(['referrals' => function (Builder $query) {$query->where('status','active'); }])
    • 传递给 App\Http\Controllers\AdminController::App\Http\Controllers\{closure}() 的参数 1 必须是 Illuminate\Database\Query\Builder 的实例,Illuminate\Database 的实例\Eloquent\Builder 给定,调用这是我得到的错误
    • 您导入了错误的构建器,要么导入 use Illuminate\Database\Eloquent\Builder;,要么从 function (Builder $query) 中删除 Builder,它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多