[英]Laravel Raw and Eloquent Queries
我有一个表transactions
,它有一个paymentable_id
和paymentable_type
列,用于多态关系。 我有一个Plan
模型,用于付款计划。 每当针对该计划进行交易时,这些交易将使用多态关系与该计划相关联。
现在,我想从数据库中获取所有Plans
,包括一个名为total_amount
的字段。 total_amount
字段应包括与该计划相关的所有transactions.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_id
和paymentable_type
对我来说似乎是错误的。 我还需要为许多其他查询执行此操作,因为多态关系最多可以包含 5 个不同的模型。
问题 1. 上面的查询是否正确?如果是,是否还有“更好的方法”来创建该查询?
问题 2. 下面的查询也有效,但我可能不明白这部分:
->join('transactions', 'plans.id', '=', 'transactions.paymentable_id')
每当我包含->where('transactions.paymentable_id', '=', 'plans.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')]);
任何指针都非常感谢。
我不知道你的数据库
$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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.