将查询生成器在 Laravel 中返回的 stdClass/Array 按值拆分为 2 个数组

Split stdClass/Array returned by Query Builder in Laravel into 2 arrays by value

所以我试图从所有账单中获取所有详细信息,在 bill_details table 中我有一列来标识该详细信息所属的账单(外键),我的查询看起来像这个:

return $this
            ->join('bill_detail as bd'  , 'bills.id'            , '=', 'bd.bill_id')
            ->join('business'           , 'bills.business_id'   , '=', 'business.id')
            ->select('bills.user_id','bd.item','bd.quantity','bd.amount','bd.bill_id','bills.total')
            ->where('bills.user_id', '=', $user)
            ->get();

哪个 returns 这个 stclass 或数组(格式为 php):

array(4) { 
    [0]=> array(6) 
        { ["user_id"]=> int(1) ["item"]=> string(4) "Coffe" ["quantity"]=> int(1) ["amount"]=> string(4) "2.00" ["bill_id"]=> int(1) ["total"]=> string(5) "15.00" }
    [1]=> array(6) 
        { ["user_id"]=> int(1) ["item"]=> string(18) "Water" ["quantity"]=> int(1) ["amount"]=> string(4) "6.00" ["bill_id"]=> int(1) ["total"]=> string(5) "15.00" } 
    [2]=> array(6)
        { ["user_id"]=> int(1) ["item"]=> string(7) "Apple" ["quantity"]=> int(1) ["amount"]=> string(4) "1.00" ["bill_id"]=> int(2) ["total"]=> string(5) "23.00" } 
    [3]=> array(6) 
        { ["user_id"]=> int(1) ["item"]=> string(8) "Orange" ["quantity"]=> int(1) ["amount"]=> string(4) "4.00" ["bill_id"]=> int(2) ["total"]=> string(5) "23.00" } 
}

除了 foreach 之外,是否有任何最佳方法可以根据 bill_id 列将此数组拆分为多维数组?

谢谢。

是的,您可以 collect 然后按 bill_id 分组。

$results = $this
    ->join('bill_detail as bd'  , 'bills.id'            , '=', 'bd.bill_id')
    ->join('business'           , 'bills.business_id'   , '=', 'business.id')
    ->select('bills.user_id','bd.item','bd.quantity','bd.amount','bd.bill_id','bills.total')
    ->where('bills.user_id', '=', $user)
    ->get();

return collect($results)->groupBy('bill_id');