我有一個表transactions
其中有一個paymentable_id
和paymentable_type
列,多態關係。我有一個Plan
模型,用於付款計劃。每當進行該計劃的交易時,交易都將使用多態關係與該計劃相關聯。Laravel原始和雄辯查詢
現在,我想從數據庫中提取所有Plans
,其中包括一個名爲total_amount
的字段。 total_amount
字段應包含與該計劃相關的所有transactions.amount
的總和。
到目前爲止,並從另一個問題,我問的幫助下,我想出了以下內容:
$計劃=軟件\型號\計劃::所有( '*',DB :: RAW(「( SELECT SUM(amount)FROM transactions WHERE paymentable_id = plans.id AND paymentable_type ='App \\ Models \\ Plan')as total_amount「));
這工作完全正常。不過,我覺得這是完全錯誤的:
WHERE paymentable_id = plans.id AND paymentable_type = 'App\\\\Models\\\\Plan'
此外,需要指定paymentable_id
和paymentable_type
看來我錯了。我還需要做很多其他查詢,因爲多態關係最多可以包含5個不同的模型。
問題1.上面是否使用了正確的查詢?如果是,是否也有可能是創建該查詢的「更好的方法」?
問題2.下面的查詢還工作,但是我也許不明白這個部分:每當我包括->where('transactions.paymentable_id', '=', 'plans.id')
->join('transactions', 'plans.id', '=', 'transactions.paymentable_id')
,它按預期工作。但沒有那部分,它基本上忽略了paymentable_id
。
$plans = DB::table('plans')->join('transactions', 'plans.id', '=', 'transactions.paymentable_id')
->where('transactions.paymentable_type', '=', 'App\\Models\\Plan')
->get([DB::raw('sum(transactions.amount) as total_amount')]);
任何指針都非常感謝。
謝謝,這似乎工作,幫助我學習一些新的東西出現,酷: – Hardist