我正在为包含许多复杂查询的大型laravel应用构建分析仪表板。我经常希望将查询链接在一起,否则我会在整个地方复制代码,写下这样的内容:
$query_result = $this->customers
->whereActiveBetween($dates)
->withOrdersizeGreaterThan($amount)
->get();
因为它们非常具体,冗长,并且未在应用程序的其他部分中使用,所以我希望避免使用仅由分析存储库使用的查询范围来污染我已经很复杂的模型。那么,实现这一目标的最佳方法是什么,既保持代码可读性又使代码可重用?
答案 0 :(得分:1)
查看特征 - PHP 5.4 中引入的一项功能,可以轻松地在独立类中重复使用代码。您可以在http://php.net/manual/en/language.oop5.traits.php
的文档中找到更多详细信息在你的情况下,类似的东西应该有所帮助:
// move reusable scopes to a trait
trait AnalyticsScopes {
function whereActiveBetween() { your code here }
function withOrdersizeGreaterThan() { your code here }
}
// add trait to your model classes
class Customer extends Model {
use AnalyticsScopes;
}
// use scopes as if they were implemented in your models
$query_result = $this->customers
->whereActiveBetween($dates)
->withOrdersizeGreaterThan($amount)
->get();