我有三个模型(组织,用户,访问)和4个表(组织,用户,organization_user,访问)。 我正在尝试获取组织的用户访问总数。
Organization
------------
id,
name
User
---------
id,
name
Organization_User
----------------
id,
organization_id,
user_id
Visit
--------------
id,
user_id
views
需要澄清的是,没有Organization_User模型,这只是User和Organization使用的数据透视表:
$organization->belongsToMany('User');
$user->belongsToMany('Organization');
我可以通过group_id从数据透视表中查询所有user_id,然后获取每个user_id的所有访问次数,但是还有什么更雄辩的方法呢?
用户有多次访问,而访问属于用户。 访问不属于组织。
我看不到访问与用户之间没有任何关系,并且用户可以有许多组织-您如何确定给定访问记录属于哪个组织? 还是应该为该用户所属的所有组织计算与用户A链接的访问?
用户有多次访问,而访问属于用户。 访问不属于组织,而仅属于用户。 我想做的就是获取组织中用户的累计访问量。
您是否考虑在Organization_User中添加visit_amount?
Organization_User只是一个简单的关系数据透视表,因为一个用户可以属于多个组织,而多个组织可以属于多个用户。 它并不意味着也不应跟踪访问。
通过使用whereIn()解决了它。 基本上没有改变我当前的关系设置...为了获得累积视图,我这样做:
$org = Organization::find($org_id);
return DB::table('visits')->whereIn('user_id', $org->users->modelKeys())->sum("views");
modelKeys()返回与该组织相关的所有用户ID。 然后,我获得了这些用户的所有视图的总和。
*请注意,使用Organisation :: find而非DB :: table('organization')也是很重要的,以保持雄辩的关系。 否则$ organization-> users将给出错误。
我有一个问题,$org->users->modelKeys()是否获取与该特定组织相关的那些用户的ID? 还是组织的ID?
@pathros返回与该单个组织相关的所有用户的主键数组。
我认为您可能想要像这样的"拥有很多通过"的关系:
class Organization extends Model
{
public function visits()
{
return $this->hasManyThrough('App\Visit', 'App\User');
}
}
然后,您可以调用count()。
Laravel 5.1文档
我认为这行不通,因为用户没有Organization_id,因为用户可以属于许多组织。 因此,它的关系通过数据透视表(Organization_User)进行。
对于任何给定的解决方案,有许多方法可以使用适当的表结构来完成您想做的事情。 您是否已锁定当前表结构?
是的,它已经是一个活动的体系结构。 另外,访问次数是其自己的大型元数据表,而不仅仅是访问次数。