我在哪里可以将我的大SQL查询存储在Laravel中?

时间:2017-05-08 20:57:56

标签: laravel eloquent models

我的Laravel结构中存在问题,因为我需要向我的应用添加许多报告,因此我认为将所有内容放入控制器并不是一个好主意,因为我的雄辩模型允许我列出,添加,插入和更新,我的查询需要多个带连接的表,以及一些数学函数,如sum(),max(),min()。

当我使用Codeigniter时,我在模型文件中添加了每个查询的方法。 所以我可以称之为$ sales-> salesReport(),它给了我数据。

2 个答案:

答案 0 :(得分:1)

Laravel提供类似于Codeigniter的东西,与你描述的相符。它被称为查询范围,或者更确切地说是本地范围。您可以将它们保存在模型中,并随时调用它们。

您添加模型

public function scopeSalesReport($query) {
    return $query->join(...);
}

来源:https://laravel.com/docs/5.4/eloquent#local-scopes

答案 1 :(得分:1)

问题实际上是关于正在做什么和负责什么的问题。有一些很好的posts关于逻辑应该保留在哪里以及可以使用什么。我有点不清楚你是否要问关于范围等的链接,或者更多地放置你的逻辑。我可能会有一项服务:

<?php

class SalesReportService {

    public function generateReport(Sales $sales)
    {
        // logic here...

        return $result;
    }

}

然后在控制器中它将是:

<?php

class SalesController extends Controller {

    public function __construct(SalesReportService $reportService)
    {
        $this->reportService = $reportService;
    }

    public function show(Sales $sales)
    {
        return $this->reportService->generateReport($sales);
    }

}