【发布时间】: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