【问题标题】:Return collection based on model method result根据模型方法结果返回集合
【发布时间】:2018-12-15 17:06:35
【问题描述】:

我有一个具有 Credits 关系的 User 模型。

public function credits()
{
    return $this->hasMany('App\Credit');
}

我想退回所有信用余额大于 0 的用户。目前,我有两种方法;一个检索用户积累的总积分,另一个检索用户花费的积分。

public function creditsIncome()
{
    return $this->credits->where('type', 0)->sum('amount');
}

public function creditsExpense()
{
    return $this->credits->where('type', 1)->sum('amount');
}

为了平衡,我有第三种方法:

public function creditsBalance()
{
    return $this->creditsIncome() - $this->creditsExpense();
}

有什么方法可以做类似User::where('creditsBalance', '>', 0); 的事情吗?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您可以使用修改后的withCount()

    User::withCount([
        'credits as income' => function($query) {
            $query->select(DB::raw('sum(amount)'))->where('type', 0);
        },
        'credits as expense' => function($query) {
            $query->select(DB::raw('sum(amount)'))->where('type', 1);
        }
    ])->having(DB::raw('income - expense'), '>', 0)->get();
    

    【讨论】:

    • 对我有用 ;)
    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2015-02-23
    • 2020-02-12
    • 1970-01-01
    • 2016-03-23
    • 2020-11-20
    • 2018-06-26
    相关资源
    最近更新 更多