簡體   English   中英

Laravel:復雜的口才關系-hasManyThrough還是belongsToMany方法?

[英]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()

Laravel 5.1文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM