首页 > 解决方案 > 使用'withCount'方法获取嵌套关系的计数

问题描述

我需要帮助弄清楚如何让 withCount() 处理嵌套关系。

到目前为止我已经试过这个

return CharityArea::with('campaigns.sponsor', 'campaigns.charityArea', 'campaigns.charityDetail')->withCount('campaigns.users')->where($matchTheseThings)->get();

基本上,我想获取活动模型中的用户数。

CampaignsModel 上的关系如下所示:

public function users(){
    return $this->hasMany('App\UserPreferences', 'campaign_id', 'id');
}

与 CharityArea 中的活动的关系如下所示

public function campaigns(){
    return $this->hasMany('App\Campaigns', 'charity_area_id', 'id');
}

Laravel 抛出错误,提示找不到“campaigns.users”。

关于如何做到这一点的任何想法?

谢谢。

标签: phplaraveleloquent

解决方案


您可以首先在CharityArea模型中设置 ManyThrough 关系。


    function users()
    {
        return $this->hasManyThrough('App\UserPreferences', 'App\Campaigns');
    }

然后你可以调用withCount()它:


    return CharityArea::with('campaigns.sponsor', 'campaigns.charityArea', 'campaigns.charityDetail')
        ->withCount('users')
        ->where($matchTheseThings)
        ->get();


推荐阅读