首页 文章

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

提问于
浏览
0

我有三个模型(组织,用户,访问)和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

    通过使用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-> users会出错 .

  • 2

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

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

    然后你可以打电话给 count() .

    Laravel 5.1 doc

相关问题