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();
谢谢你,这似乎很有效,帮助我在那里学到了一些新东西,很酷: