【问题标题】:Laravel sum() method on collection returning results for all items in tableLaravel sum() 方法收集返回表中所有项目的结果
【发布时间】:2015-06-14 14:29:50
【问题描述】:

给定下表

gallery
+----+---------------+--------------+---------+
| id | gallery_title |   viewcount  | user_id |
+----+---------------+--------------+---------+
|  1 | Animals       |           10 |       1 |
|  2 | Cars          |            5 |       1 |
|  3 | Houses        |            2 |       2 |
+----+---------------+--------------+---------+

user
+----+----------+
| id | username |
+----+----------+
|  1 | Bob      |
|  2 | James    |
+----+----------+

以及以下类

class Gallery extends Model
    ....    
    public function user()
    {
        return $this->belongsTo('App\User');
    }

class User extends Model
    ....
    public function galleries()
    {
        return $this->hasMany('App\Gallery');
    }

调用 $galleryCollections= Auth::user()->galleries; 返回一个集合数组,我可以在其中迭代

foreach ($galleryCollections as $galleryCollection)
{
    $viewcount += $galleryCollection->viewcount;
}

print $viewcount; #returns 15

到目前为止,一切都按预期工作,直到此时为止。

但是,如果我不小心调用了$galleryCollection->sum('viewcount'),这是迭代的最后一个值,则返回值是 17,因为它只是运行以下 SQL select sum('viewcount') as aggregate from 'gallery'

我很难理解这里到底发生了什么。就好像它在画廊类本身上调用了“sum()”方法,而没有传入任何“where”值。我至少希望它调用 Collection 上的 sum() 方法,但它会返回到数据库。

是不是因为我的 Gallery 类没有实现 'sum()' 方法,因此它使用了 Parent Model 类而忽略了 Gallery 类?

【问题讨论】:

    标签: php mysql eloquent laravel-5


    【解决方案1】:

    如果要通过sql来统计,那么:

    Auth::user()->galleries()->sum('viewCount');
    

    但是,Auth::user()->galleries->sum('viewCount'); 将在集合 Auth::user()->galleries 上求和。 Auth::user()->galleries() 是一个 queryBuilder,而 Auth::user()->galleries 是该用户的画廊集合。

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多