Laravel:按自定义方法收集的总和

时间:2015-05-27 04:42:39

标签: php laravel-4 eloquent

我有一个拥有自定义方法的模型(假设它有一个名为'fieldname'的字段) e.g。

class X extends \Eloquent 
{
    function custommethodtest()
       {
           return rand(1);
       }
}

我想通过自定义方法使用集合和SUM,即:

 X:all()->sum('custommethodtest');

但似乎laravel只会按实际字段求和,而不是自定义方法。例如,这将起作用:

X::all()->sum('fieldname');

关于如何使这项工作的任何想法?

2 个答案:

答案 0 :(得分:0)

创建attribute accessor

,而不仅仅是方法
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表单中。中的属性   追加数组尊重可见和隐藏配置   模型。