Laravel:复杂的雄辩关系-有许多通过或属于任何方法


Laravel: Complicated Eloquent Relationship - hasManyThrough or belongsToMany approach?

我有三个模型(Organization, User, Visit)和4个表(organizations, users, organization_user, visitors)。我试图获得一个组织的用户访问的累计总数。

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的所有访问,但是哪种方法更有说服力呢?

一个用户有很多次访问,一次访问属于一个用户。访问不属于组织。

使用where()解决。基本上没有改变我目前的关系设置…为了获得累计视图,我这样做了:

$org = Organization::find($org_id);
return DB::table('visits')->whereIn('user_id', $org->users->modelKeys())->sum("views");

modelKeys()返回与该组织关联的所有用户id。然后我得到这些用户的所有视图的总和。

*注意,为了维护Eloquent关系,使用Organization::find而不是DB::table(' Organization ')也很重要。否则$organization->users将给出一个错误。

我想你可能想要一个这样的"有很多通过"的关系:

class Organization extends Model
{
    public function visits()
    {
        return $this->hasManyThrough('App'Visit', 'App'User');
    }
}

那么你可以调用count()

Laravel 5.1 doc