我有三个模型(组织,用户,访问)和4个表(组织,用户,organization_user,访问)。我正试图获得组织的累计用户访问量。
Organization
------------
id,
name
User
---------
id,
name
Organization_User
----------------
id,
organization_id,
user_id
Visit
--------------
id,
user_id
views
为了澄清,没有Organization_User模型,这只是用户和组织使用的数据透视表:
$organization->belongsToMany('User');
$user->belongsToMany('Organization');
我可以通过group_id查询数据透视表中的所有user_ids,然后获取每个user_id的所有访问次数,但是更有说服力的方法是什么?
用户进行了多次访问,访问权限属于用户。访问不属于组织。
答案 0 :(得分:2)
使用whereIn()解决它。基本上没有改变我目前的关系设置...为了获得累积的观点我做了这个:
$org = Organization::find($org_id);
return DB::table('visits')->whereIn('user_id', $org->users->modelKeys())->sum("views");
modelKeys()返回绑定到该组织的所有用户ID。然后我得到这些用户的所有观点的总和。
*请注意,使用Organization :: find而不是DB :: table(' organization')以维持Eloquent关系也很重要。否则,$ organization->用户将会出错。
答案 1 :(得分:0)
我想你可能想要一个' Has Many Through'这样的关系:
class Organization extends Model
{
public function visits()
{
return $this->hasManyThrough('App\Visit', 'App\User');
}
}
然后你可以拨打count()
。