我有一个拥有自定义方法的模型(假设它有一个名为'fieldname'的字段) e.g。
class X extends \Eloquent
{
function custommethodtest()
{
return rand(1);
}
}
我想通过自定义方法使用集合和SUM,即:
X:all()->sum('custommethodtest');
但似乎laravel只会按实际字段求和,而不是自定义方法。例如,这将起作用:
X::all()->sum('fieldname');
关于如何使这项工作的任何想法?
答案 0 :(得分:0)
public function getCustommethodtestAttribute(){
return rand();
}
然后:
X:all()->sum('custommethodtest');
答案 1 :(得分:0)
您可以使用自定义属性来实现相同的结果;
class X extends \Eloquent
{
protected $appends = [
'custom_test'
];
public function getCustomTestAttribute()
{
//NB: rand() expects exactly 2 parameters, am using 1234 for parameter 2 just for testing sake
return $this->attributes['custom_test'] = rand(1,1234);
}
}
然后:
X:all()->sum('custom_test');
上述方法优于仅使用:
public function getCustomTestAttribute(){
return rand(1);
}
出于这个原因:
将属性添加到追加列表后,它就会出现 包含在模型的数组和JSON表单中。中的属性 追加数组尊重可见和隐藏配置 模型。