首页 > 解决方案 > 在模型中进行自定义查询的最佳实践

问题描述

我有一个名为“Rate”的模型和一个名为“RateController”的相关控制器。如果想在 Rate 模型中进行自定义查询,我们可以使用本地范围或静态函数,如下所示:

在 Rate 模型中使用静态函数:

public static function avgerage($type, $id)
{
    return static::where('rateble_type', $type)
                ->where('rateble_id', $id)
                ->avg('star');
}

在速率模型中使用本地范围:

public function scopeAverageRate($type, $id, $query)
{
    return $query->where('rateble_type', $type)
                 ->where('rateble_id', $id)
                 ->avg('star');
}

最后,我们在控制器中调用上述方法之一。

问题是,哪一个是最佳实践?使用本地范围或在模型中定义静态函数?

谢谢你。

标签: phplaravel

解决方案


进一步详细说明,如果您实例化 aModel并在其上使用 amethod并且不关心该特定实例的状态,则应使用静态方法。这种情况实际适用的次数非常少。大多数时候它将是非静态的,所以大多数时候你将使用local scope.

创建查询时,问问自己它是否Model? 如果是这样,则使用本地范围。如果它涉及到 的概念Model则使用静态。


推荐阅读