簡體   English   中英

Laravel eloquent 模型 - 按總和過濾

[英]Laravel eloquent models - filter by sum

我有兩個模型:

用戶:ID、姓名、電子郵件

佣金:id、user_id、金額、支付、退款、created_at

關系:用戶有很多佣金

我需要計算每個用戶每月的佣金總和並將其下載到 CSV 文件中以進行批量支付,但這些總和必須大於 25 且小於 25000。

目前這是我所擁有的,但如何根據金額范圍進行過濾? 我需要將那些已支付的佣金標記為已支付,但只有那些大於 25 且小於 25000 的佣金才會支付

$commissions = Commissions::whereYear('created_at', $date->year)
->whereMonth('created_at', $date->month)
->where('paid', 'no')
->where('refund', 'no')
->get();

我可以通過計算 foreach 中的數量來進行過濾,但我幾乎可以肯定 Laravel 中有一種更優雅的方式來做到這一點。

簡單的另一個條件whereBetween

$commissions = $user->commissions()
    ->whereYear('created_at', $date->year)
    ->whereMonth('created_at', $date->month)
    ->where([['paid' , 'no'], ['refund', 'no']])
    ->whereBetween('price', [25, 25000])
    ->sum('price');

或:

$commissions = $user->commissions()
    ->whereYear('created_at', $date->year)
    ->whereMonth('created_at', $date->month)
    ->where([['paid' , 'no'], ['refund', 'no']])
    ->sum('price')->filter(function($value, $key){

        return in_array($value, [25,25000]);

     });

我不認為有一個簡單的解決方案:

$commissions = Commission::whereYear('created_at', $date->year)
    ->whereMonth('created_at', $date->month)
    ->where('paid', 'no')
    ->where('refund', 'no')
    ->where('amount', '<', 25000)
    ->orderByDesc('amount')
    ->get();
$grouped = $commissions->groupBy('user_id');
$grouped = $grouped->filter(function($commissions) {
    return $commissions->sum('amount') > 25;
});
$grouped = $grouped->map(function($commissions) {
    $sum = 0;
    return $commissions->filter(function($commission) use(&$sum) {
        $sum += $commission->amount;
        return $sum < 25000;
    });
});
$commissions = $grouped->collapse();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM