Laravel Raw和Eloquent Queries

时间:2017-07-03 18:48:33

标签: php laravel join eloquent

我有一个表transactions,其中包含paymentable_idpaymentable_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')]);

非常感谢任何指针。

1 个答案:

答案 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();