第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Laravel eloquent/collections 計算 PHP 中相似鍵的總量

如何使用 Laravel eloquent/collections 計算 PHP 中相似鍵的總量

PHP
慕森王 2021-11-26 19:13:46
我目前有 API 返回的以下 json 響應。我可以使用 Laravel Eloquent 返回它。有多個用戶,每個用戶都有幾張收據(jù)。收據(jù)具有類型和狀態(tài)。我想嘗試獲取與其類型和狀態(tài)相關(guān)的每張收據(jù)的總金額。我能夠使用返回以下 json 響應$this->user->with('receipts')->has('receipts')->get(['id', 'name']);我曾嘗試使用多種 laravel 集合方法https://laravel.com/docs/5.8/collections#available-methods 但我仍然無法獲得所需的響應。    {        "id": 1,        "name": "kent",        "receipts": [            {                "id": 1,                "user_id": 1,                "type_id": 1,                "status": 0,                "amount": 100            },            {                "id": 2,                "user_id": 1,                "type_id": 1,                "status": 0,                "amount": 100            },            {                "id": 3,                "user_id": 1,                "type_id": 2,                "status": 1,                "amount": 50            },            {                "id": 4,                "user_id": 1,                "type_id": 2,                "status": 0,                "amount": 30            },            {                "id": 5,                "user_id": 1,                "type_id": 2,                "status": 0,                "amount": 30            },            {                "id": 6,                "user_id": 1,                "type_id": 1,                "status": 0,                "amount": 20            },            {                "id": 7,                "user_id": 1,                "type_id": 1,                "status": 1,                "amount": 10            }        ]        },        {            "id": 2,            "name": "allison",            "receipts": [                {                    "id": 9,                    "user_id": 2,                    "type_id": 1,                    "status": 0,                    "amount": 20                }        ]    }]
查看完整描述

3 回答

?
慕容708150

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

            ];

        })

    );

})


查看完整回答
反對 回復 2021-11-26
?
明月笑刀無情

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ù)。


查看完整回答
反對 回復 2021-11-26
?
滄海一幻覺

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;

});

}

http://img1.sycdn.imooc.com//61a0c1990001b1e903580396.jpg

查看完整回答
反對 回復 2021-11-26
  • 3 回答
  • 0 關(guān)注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號