首页 > 解决方案 > Laravel eloquent 依赖 belongsTo id

问题描述

我有 2 张桌子subscribers& subscriber_packagessubscriber我需要通过给定获取所选的当前活动包的计数subscriber_package / id

表:

# | subscriber_id | package_id | active
---------------------------------------
1 |             1 |          1 | true  
2 |             1 |          2 | true  
3 |             1 |          3 | true  
4 |             1 |          4 | false 
---------------------------------------

App\SubscriberPackage.php

class SubscriberPackage extends Model
{
    public function subscriber()
    {
        return $this->belongsTo(Subscriber::class);
    }
    public function package()
    {
        return $this->belongsTo(Package::class);
    }

    public function _countActivePackages($subscriberPackage)
    {
        return self::where([
            'id'     => $subscriberPackage,
            'status' => \Common::STATUS_ACTIVE,
        ])->whereHas('subscriber')->count();
    }
}

标签: laraveleloquentcountrelationship

解决方案


在您的订阅者处,您需要正确定义 HasManyThrough 关系,并且只需正确添加 where 原因以检查状态,即使在单独的方法中也是如此

    public function packages()
    {
        return $this->hasManyThrough(Package::class, SubscriberPackage::class);
    }

    public function activePackages()
    {
        return $this->packages()
            ->where("subscriber_package.status", "=", "active");
    }

之后,您可以随时使用它进行计数

$subscriber->activePackages()->count();


推荐阅读