2017-07-03 76 views
0

我有一個表transactions其中有一個paymentable_idpaymentable_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_idpaymentable_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')]); 

任何指針都非常感謝。

回答

1

我不知道你的數據庫

$plans = DB::table('plans')->join('transactions', 'plans.id', '=', 'transactions.paymentable_id') 
         ->where('transactions.paymentable_type', '=', 'you_plan_type') 
         ->select('plans.*','transactions.*') 
         ->selectRaw('sum(transactions.amount) as total_amount') 
         ->get(); 
+0

謝謝,這似乎工作,幫助我學習一些新的東西出現,酷: – Hardist