Php 拉雷维尔原始而雄辩的询问

Php 拉雷维尔原始而雄辩的询问,php,laravel,join,eloquent,Php,Laravel,Join,Eloquent,我有一个表transactions,它有一个paymentable\u id和paymentable\u type列,用于多态关系。我有一个计划模型,用于支付计划。每当为该计划创建事务时,这些事务都将使用多态关系与该计划关联 现在,我想从数据库中获取所有计划,包括一个名为total\u amount的字段。total_amount字段应包括与该计划相关的所有交易的总和。amount 到目前为止,在我提出的另一个问题的帮助下,我得出了以下结论: $plans = App\Models\Plan::

我有一个表
transactions
,它有一个
paymentable\u id
paymentable\u type
列,用于多态关系。我有一个
计划
模型,用于支付计划。每当为该计划创建事务时,这些事务都将使用多态关系与该计划关联

现在,我想从数据库中获取所有
计划
,包括一个名为
total\u amount
的字段。
total_amount
字段应包括与该计划相关的所有
交易的总和。amount

到目前为止,在我提出的另一个问题的帮助下,我得出了以下结论:

$plans = App\Models\Plan::all('*', 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\u id
paymentable\u类型
似乎是错误的。我还需要对许多其他查询执行此操作,因为多态关系最多可以包含5种不同的模型

问题1。上面的查询是否正确?如果正确,是否还有“更好的方法”来创建该查询

问题2。下面的查询也有效,但我可能不理解这一部分:

->join('transactions', 'plans.id', '=', 'transactions.paymentable_id')
每当我将
->where('transactions.paymentable_id'、'='、'plans.id')
包括在内时,它就会按预期工作。但如果没有这一部分,它基本上忽略了
可支付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')]);

非常感谢您的指点。

我不知道您的数据库

$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();

谢谢你,这似乎很有效,帮助我在那里学到了一些新东西,很酷: