3 回答

TA貢獻1831條經(jīng)驗 獲得超4個贊
你應該能夠得到金額的總和
$this->user->with(['receipts' => function($query) {
$query->selectRaw("SUM(amount) as amount, type_id, status, user_id")->groupBy('type_id', 'status', 'user_id');
}])->has('receipts')->get(['id', 'name']);
您可以使用收集方法來獲得所需的輸出
$this->user->with(['receipts' => function($query) {
$query->selectRaw("SUM(amount) as amount, type_id, status, user_id")->groupBy('type_id', 'status', 'user_id');
}])->has('receipts')->get(['id', 'name'])
->each(function ($user) {
$user->setRelation(
'receipts',
$user->receipts->mapWithKeys(function ($receipt) {
return [
$receipt->type_id . ' and ' . $receipt->status => $receipt->amount // format the key as you wish
];
})
);
})

TA貢獻1828條經(jīng)驗 獲得超4個贊
您可以使用 foreach 和其他循環(huán)來制作您想要的 json!使用此函數(shù)將您的集合轉(zhuǎn)換為您想要的 json:
public function convert(Collection $collection)
{
$result_collection = $collection;
$payment_collections = [];
foreach ($result_collection->receipts as $receipt)
{
$payment["type_id${receipt->type_id} and status${$receipt->status}"] = $receipt->amount;
}
$result_collection->receipts = $payment_collections;
return $result_collection;
}
這與獲得總金額的方法相同。只需放置一個 foreach 并將每個數(shù)量添加到一個初始化為 0 的變量中;
還有其他方法,例如在您的Resource Collection 中更改 toArray 函數(shù)。

TA貢獻1824條經(jīng)驗 獲得超5個贊
我編寫腳本時假設(shè)您的數(shù)據(jù)是一個 PHP 數(shù)組,因此您可以更改我的代碼的某些部分。例如,您可以更改:
$row['receipts']
// To
$row->receipts
反正
// The function in your controller
function index(){
$users=User::whereHas('receipts')->with('receipts')->get()->toArray();
return convert($users);
}
// The helper function
function convert($data){
$data=collect($data);
$allTypes=[];
$allStatuses=[];
return $data->each(function($row) use (&$allTypes,&$allStatuses){
$types=collect($row['receipts'])->pluck('type_id')->toArray();
$statuses=collect($row['receipts'])->pluck('status')->toArray();
$allTypes=array_unique(array_merge($allTypes,$types));
$allStatuses=array_unique(array_merge($allStatuses,$statuses));
})->map(function ($row,$index) use (&$allTypes,&$allStatuses){
$result=[];
$receipts=collect($row['receipts']);
foreach ($allTypes as $type){
foreach ($allStatuses as $status){
$result["type_id {$type} and status {$status}: "]=$receipts->where('type_id',$type)->where('status',$status)->sum('amount');
}
}
$row['receipts']=$result;
return $row;
});
}
- 3 回答
- 0 關(guān)注
- 190 瀏覽
添加回答
舉報