php - 在模型中进行自定义查询的最佳实践
问题描述
我有一个名为“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');
}
最后,我们在控制器中调用上述方法之一。
问题是,哪一个是最佳实践?使用本地范围或在模型中定义静态函数?
谢谢你。
解决方案
进一步详细说明,如果您实例化 aModel
并在其上使用 amethod
并且不关心该特定实例的状态,则应使用静态方法。这种情况实际适用的次数非常少。大多数时候它将是非静态的,所以大多数时候你将使用local scope
.
创建查询时,问问自己它是否与Model
? 如果是这样,则使用本地范围。如果它涉及到 的概念,Model
则使用静态。
推荐阅读
- python - pandas readcsv ValueError:标题必须是整数或整数列表
- javascript - 语法错误:意外标记,应为“,”
- javascript - 页面加载时关闭引导树视图
- google-visualization - 在栏内获取注释 - Google Charts Material
- ruby - React-Native Error + Bug in Ruby Interpreter: Failed to install CocoaPods dependencies for iOS project, which is required by this template
- c++ - 第一次输入后字符串输入被忽略
- python - 当大小不同时,如何根据预测值绘制图形真实值?
- angular - 无法在primeng的日历时间戳上调用toDate()
- python - Selenium WebDriver find_element_by_xpath 不适用于文本
- git - 在提交中恢复对子模块的更改