[英]Laravel: Complicated Eloquent Relationship - hasManyThrough or belongsToMany approach?
我有三個模型(組織,用戶,訪問)和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的所有訪問次數,但是還有什么更雄辯的方法呢?
用戶有多次訪問,而訪問屬於用戶。 訪問不屬於組織。
通過使用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')來保持口才關系也很重要。 否則$ organization-> users將給出錯誤。
我認為您可能想要像這樣的“擁有很多通過”的關系:
class Organization extends Model
{
public function visits()
{
return $this->hasManyThrough('App\Visit', 'App\User');
}
}
然后,您可以調用count()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.