Laravel:复杂的雄辩关系 - hasManyThrough还是belongsToMany方法?

时间:2015-07-08 21:38:57

标签: php laravel eloquent relationships

我有三个模型(组织,用户,访问)和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的所有访问次数,但是更有说服力的方法是什么?

用户进行了多次访问,访问权限属于用户。访问不属于组织。

2 个答案:

答案 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()

Child Themes « WordPress Codex