繁体   English   中英

Laravel 原始查询和 Eloquent 查询

[英]Laravel Raw and Eloquent Queries

我有一个表transactions ,它有一个paymentable_idpaymentable_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_idpaymentable_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM