我有一个表transactions
,其中包含paymentable_id
和paymentable_type
列,用于多态关系。我有一个Plan
模型,用于付款计划。每当进行该计划的交易时,交易将使用多态关系与该计划相关。
现在,我想从数据库中获取所有Plans
,包括一个名为total_amount
的字段。 total_amount
字段应包含与该计划相关的所有transactions.amount
的总和。
到目前为止,在我提出的另一个问题的帮助下,我想出了以下内容:
$ plans = App \ Models \ Plan :: all('*',DB :: RAW(“(SELECT SUM(金额)FROM交易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
AND 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')]);
非常感谢任何指针。
答案 0 :(得分: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();