我有兩個模型,Plan
和Transactions
。每個Plan
可以有許多Transactions
。我想獲得與所有計劃相關的所有交易的總金額。現在我這樣做是這樣的:Laravel使用過濾器和地圖而不是foreach
$plans = $this->plan->with('transactions')->get();
$total = [];
foreach($plans as $plan)
{
foreach($plan->transactions as $transaction)
{
$total[] = $transaction->amount;
}
}
dd(array_sum($total)); // Works, I get the total amount of all transactions that are related to a Plan.
但我想擺脫foreach循環,並使用filter
和/或map
代替。我已經嘗試以下內容:
$test = $plans->filter(function ($plan) {
return $plan->has('transactions');
})->map(function ($plan) {
return $plan->transactions;
})->map(function ($transaction) {
return $transaction; // Not sure what to do here, $transaction->amount doesn't work
});
我正在被卡住在最後一位,最後我收集了一個集合。任何想法如何實現這一點,至少不使用foreach循環?也許可能在查詢本身?
所以我有幾個Plans
,並且每個Plan
可以有很多Transactions
。每個Transaction
有一個amount
字段,其中我存儲每個Transaction
的金額。我希望獲得與計劃相關的所有交易的總金額。所以,這些交易總額。
在我看來,「減少」位的確有竅門。 @Alexey Mezenin,我的計劃和交易使用多對多多態關係相關,所以我的交易沒有'plan_id',忘記提及。謝謝@Joel Hinz和謝謝@Alexey Mezenin的幫助:) – Hardist
我想指出,來自@Joel Hinz的偉大答案,謝謝你的解釋和例子,真的很感謝它 – Hardist
沒有汗水,很高興它是有幫助的。 :) –