php hasmany,关于php:Laravel:复杂的口才关系-hasManyThrough或belongsToMany方法吗?

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

对于任何给定的解决方案,有许多方法可以使用适当的表结构来完成您想做的事情。 您是否已锁定当前表结构?

是的,它已经是一个活动的体系结构。 另外,访问次数是其自己的大型元数据表,而不仅仅是访问次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值