给出下表
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'
。
我很难理解这里到底发生了什么。这几乎就像它在gallery类本身上调用'sum()'方法而不传递任何'where'值。我至少期望它在Collection上调用sum()方法,而是回到数据库。
是因为我的Gallery类没有实现'sum()'方法,因此它使用Parent Model类并忽略Gallery类?
答案 0 :(得分:0)
如果你想通过sql计算,那么:
Auth::user()->galleries()->sum('viewCount');
但是,Auth::user()->galleries->sum('viewCount');
会对集合Auth::user()->galleries
求和。
Auth::user()->galleries()
是一个queryBuilder,而Auth::user()->galleries
是该用户的一组画廊。