我的Laravel结构中存在问题,因为我需要向我的应用添加许多报告,因此我认为将所有内容放入控制器并不是一个好主意,因为我的雄辩模型允许我列出,添加,插入和更新,我的查询需要多个带连接的表,以及一些数学函数,如sum(),max(),min()。
当我使用Codeigniter时,我在模型文件中添加了每个查询的方法。 所以我可以称之为$ sales-> salesReport(),它给了我数据。
答案 0 :(得分:1)
Laravel提供类似于Codeigniter的东西,与你描述的相符。它被称为查询范围,或者更确切地说是本地范围。您可以将它们保存在模型中,并随时调用它们。
您添加模型
public function scopeSalesReport($query) {
return $query->join(...);
}
答案 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);
}
}