laravel雄辩,总结来自链接表的多行

时间:2017-11-14 16:10:33

标签: php mysql laravel eloquent

我有一张表Report.where('department_ids @> ARRAY[?]::integer[]', [2, 5]) ,与Quotes表格有一对多的关系。

表结构如下所示:

QuoteDetails

结果:

return $this->quotes->with('quotedetails')
    ->orderBy('created_at', 'DESC')->paginate(10);

我希望包含{ "current_page":1, "data":[ { "id":2, "subject":"demo", "quotedetails":[ { "id":2, "quotes_id":2, "description":"testing data", "total":1080 }, { "id":3, "quotes_id":2, "description":"testing", "total":180 } ] }, { "id":1, "subject":"demo", "quotedetails":[ { "id":1, "quotes_id":1, "description":"data", "total":360 } ] } ], "per_page":10, "prev_page_url":null, "to":2, "total":2 } 的总和,而不是quotedetails.total行的完整列表。我不确定应该怎么做。

以下是我在模型中查询的方式(QuoteDetails

Quotes

如何获得public function quotedetails(){ return $this->hasMany('App\Models\QuotesDetail', 'quotes_id', 'id'); } 总和。

以下是我对输出的预期

total

2 个答案:

答案 0 :(得分:5)

$query->withCount([
'quotedetail AS quotesum' => function ($query) {
            $query->select(DB::raw("SUM(total) as quotesum"));
        }
    ]);

答案 1 :(得分:1)

我知道您希望通过查询来执行此操作,但是在没有查询的情况下执行此操作您将能够以这种方式转换分页数据,并提供此示例:

$quotes = Quotes::whereNotNull('id')->with('quotedetails')
    ->orderBy('created_at', 'DESC')->paginate();

//transform the data in the Paginate instance
$quotes->getCollection()->transform(function($quote){
     $quote->quotesum = $quote->quotedetails->sum('total');
     unset($quote['quotedetails']);
     return $quote;
});

分页结果中的数据已转换,您拥有所请求的内容。

  

专业版:在不添加任何查询的情况下,可以更有效地使用您的回复。

     

Con:结果中的更多数据意味着对集合的更多工作,尤其是在大数据的情况下。